TokenMismatchException
CSRFトークンが一致しない場合に発生するエラー
概要
TokenMismatchException は、LaravelのCSRF(Cross-Site Request Forgery)保護機能により、リクエストに含まれるCSRFトークンがセッションのトークンと一致しない場合に発生するエラーです。
エラーメッセージ
Illuminate\Session\TokenMismatchException
CSRF token mismatch.
419 | Page Expired
原因
- CSRFトークンの欠落: フォームに
@csrfが含まれていない - セッションの期限切れ: ユーザーのセッションが切れた
- ブラウザのキャッシュ: 古いページがキャッシュされている
- 複数タブ・ウィンドウ: 別タブでログアウト後に送信
- Ajaxリクエストの設定ミス: CSRFトークンがヘッダーにない
解決策
1. フォームにCSRFトークンを追加
{{-- Blade テンプレート --}}
<form method="POST" action="/submit">
@csrf {{-- CSRFトークンを追加 --}}
<input type="text" name="name">
<button type="submit">送信</button>
</form>
{{-- または手動で追加 --}}
<form method="POST" action="/submit">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" name="name">
<button type="submit">送信</button>
</form>
2. Ajax リクエストでの設定
| |
3. 特定のルートをCSRF検証から除外
| |
4. セッション設定の確認
| |
| |
5. セッションストレージの確認
| |
6. ロードバランサー環境での対応
| |
7. SPA(Single Page Application)での対応
| |
| |
8. エラーハンドリング
| |
9. JavaScript でのエラーハンドリング
| |
デバッグのコツ
トークンの確認
{{-- セッションのトークンを確認 --}}
{{ csrf_token() }}
{{ session()->token() }}
| |
セッションの確認
| |
Laravel の他のエラー
この記事は役に立ちましたか?