【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関連も絡んでいるかもしれません。とりあえず、動かすには問題なさそうです。