【Laravel】419エラーならenvも疑え!

もくじ

419 Page Expired

f:id:bonoponz:20201022151235p:plain

まず419エラーが出たら疑うのは「CSRF対策をしているか否か」です。

CSRFについては↓こちらから。

bonoponz.hatenablog.com

CSRF対策をしていない

419が返ってくる要因は、POST通信の際のCSRFクロスサイトリクエストフォージェリ)対策ができていないことです。そのためログインフォームなどでエラーになることが多いです。

Laravelの独自エラーコードのようですね。

フォームに@csrfを入れるだけです。解決はとても簡単。

<form method="POST" action="/">
@csrf  // ★これ
〜処理〜
</form>

CSRF対策はしている

CSRF対策はしているのに419エラーになることがあります。過去に何度も苦しめられてきました。

そうなるタイミングはいつも同じ。configのキャッシュクリアした直後!

↓こちらもご参考ください。

bonoponz.hatenablog.com

ではなぜ?

CSRF対策は全く関係なく、.envの設定によるものでした。

具体的には、SSL通信ではないにもかかわらずSESSION_SECURE_COOKIE=trueにしていたことが原因でした。falseにしていたはずなんですがキャッシュクリアするとtrueに戻るんでしょうか。検証の余地はありそうです。

$ vi .env

.envファイルを開いて下記のように修正してください。

SESSION_SECURE_COOKIE=false

.envファイルを更新したらキャッシュをクリアします。

$ php artisan config:clear

すると419エラーは解消されてアクセスすことができるようになりました。

すっかり忘れていましたが、過去にも軽く触れていました...記憶から忘却されてますね。たまには自分のブログを振り返る時間を設けて経験を知見に昇華させていきたいものです。

bonoponz.hatenablog.com

参考URL

csrfが対策されているのに419エラーが出る - Qiita