conocode
このコード
トラブルシューティング

Laravel で 419 エラー

Laravel で Form 作って送信したら 419 エラーになるんですけど
Form を作るときは「おまじない」が必要だよ

Laravel で Form を作成し、POSTで送信しようとしたら送信先のページで
419 エラーが発生しました。

Sorry, your session has expired.
Please refresh and try again.

というメッセージです。

もう一度試してね、ということなので、もう一度試すも同じメッセージが表示されてしまいます。

エラーの原因は?

メッセージにはセッションが切れたと書いてありますが、原因はセッションの有効期限切れではなくForm のパラメタを正しく記載していないことでした。

Laravel の Form では自動的に CSRF に対するプロテクションが組み込まれるようで、そのチェックに失敗しているようです。

エラーへの対処方法は?

Form タグの中に「おまじない」を書いてあげます。

上記のように <form>と</form>の間のどこかに @csrf を記述します。

これで問題なくページが遷移するようになりました。

@csrf を書くとどうなるの?

@csrf を書くと、出力されるソースでは

@csrf があった部分に <input …> というようなタグが挿入され、遷移先のページでTokenの検証が行われるようになるようです。