スポンサーリンク
Laravel で Form 作って送信したら 419 エラーになるんですけど
Form を作るときは「おまじない」が必要だよ
Laravel で Form を作成し、POSTで送信しようとしたら送信先のページで
419 エラーが発生しました。
Sorry, your session has expired.
Please refresh and try again.
というメッセージです。
もう一度試してね、ということなので、もう一度試すも同じメッセージが表示されてしまいます。
スポンサーリンク
エラーの原因は?
メッセージにはセッションが切れたと書いてありますが、原因はセッションの有効期限切れではなく、Form のパラメタを正しく記載していないことでした。
Laravel の Form では自動的に CSRF に対するプロテクションが組み込まれるようで、そのチェックに失敗しているようです。
エラーへの対処方法は?
Form タグの中に「おまじない」を書いてあげます。
1 2 3 4 5 |
<form role="form" action="/hogehoge" method="POST"> @csrf : : </form> |
上記のように <form>と</form>の間のどこかに @csrf を記述します。
これで問題なくページが遷移するようになりました。
@csrf を書くとどうなるの?
@csrf を書くと、出力されるソースでは
1 2 3 4 5 |
<form role="form" action="/hogehoge" method="POST"> <input type="hidden" name="_token" value="Tokenの値"> : : </form> |
@csrf があった部分に <input …> というようなタグが挿入され、遷移先のページでTokenの検証
スポンサーリンク
スポンサーリンク