【Laravel + Inertia】419がどうしても治らなくてChromeキャッシュを全て削除した話

こんにちは、フリーランスエンジニアの太田雅昭です。

Laravel 419エラー

Laravelで419エラーが出る事象は、検索すればたくさん出てきます。CSRFトークンにまつわる話ばかりなのですが、どうも修正がうまくいかず結局Chromeのキャッシュを全て削除することで解決したというお話です。

現象

突然、ローカルテスト環境でログインできなくなりました。どうもおかしいなとコードの修正履歴を確認するも、怪しいところはありません。昨日まではログインできていたのにというのは、よくある話かと思いますが、変更箇所も怪しくないとすると、どういうことなのか。

普段はChromeを使用しているのですが、試しにSafariで試してみると、なぜかログインできました。それならとChromeのシークレットモードで試すと、こちらもログインできました。どうやらLaravelというよりは、ブラウザによるもののようです。

リクエストヘッダー

Chromeのシークレットモードでの通信では、リクエストヘッダーにX-XSRF-TOKENが送信されていました。これが、おそらくInertiaでのCSRF認証のやり方なのだろうと思います。しかしChromeの通常モードでは、X-XSRF-TOKENが送信されていません。なぜなのか。

Chromeのキャッシュを削除

とりあえず開発ツールでクッキーやセッションストレージなどを削除しても治りませんでした。結局、Chromeの設定から、すべての期間のすべてのデータを削除することで、正常にログインできるようになりました。

原因が気になるところですが、ひとまず治ったのでよしとしようと思います。それにしても原因は一体。。。

2024年11月13日追記

こちら、ひとまずの原因がわかりました。どうも本番環境のクッキーが影響していたようです。

本番環境のドメインがxxx.example.comとすると、開発環境がlocal.xxx.example.comでした。このxxx.example.comでのクッキーを削除すると、local.xxx.example.comでの問題が解消しました。

なるほど、それではそこをなんとかすればすべて解決かと思いきや、どうもそうではなさそうです。ステージング環境でstaging.xxx.example.comがあるのですが、こちらは特に問題は発生していません。local環境のみhttpですので、もしかするとhttp,https関連も絡んでいるかもしれません。とりあえず、動かすには問題なさそうです。