もくじ
419 Page Expired
まず419エラーが出たら疑うのは「CSRF対策をしているか否か」です。
CSRFについては↓こちらから。
CSRF対策をしていない
419が返ってくる要因は、POST通信の際のCSRF(クロスサイトリクエストフォージェリ)対策ができていないことです。そのためログインフォームなどでエラーになることが多いです。
Laravelの独自エラーコードのようですね。
フォームに@csrf
を入れるだけです。解決はとても簡単。
<form method="POST" action="/"> @csrf // ★これ 〜処理〜 </form>
CSRF対策はしている
CSRF対策はしているのに419エラーになることがあります。過去に何度も苦しめられてきました。
そうなるタイミングはいつも同じ。configのキャッシュクリアした直後!
↓こちらもご参考ください。
ではなぜ?
CSRF対策は全く関係なく、.env
の設定によるものでした。
具体的には、SSL通信ではないにもかかわらずSESSION_SECURE_COOKIE=true
にしていたことが原因でした。false
にしていたはずなんですがキャッシュクリアするとtrue
に戻るんでしょうか。検証の余地はありそうです。
$ vi .env
.env
ファイルを開いて下記のように修正してください。
SESSION_SECURE_COOKIE=false
.env
ファイルを更新したらキャッシュをクリアします。
$ php artisan config:clear
すると419エラーは解消されてアクセスすことができるようになりました。
すっかり忘れていましたが、過去にも軽く触れていました...記憶から忘却されてますね。たまには自分のブログを振り返る時間を設けて経験を知見に昇華させていきたいものです。