【Laravel】CSRFトークンを付けているのに、status419エラー
Laravelでajax通信をする時、セキュリティの観点からCSRFトークンを付けていないとエラーになります。しかし、CSRFトークンを設定しているのに、status419エラーが出た時の話。
現象
通常時は正常に稼働しているんですが、以下のような場合に、status419エラーが出た。
・定期的にAjax通信をするページで、そのページを開きっぱなしにしていた時。
・ページを開いた時に、前回のajax通信が残っている時。
(ブラウザの設定で、立ち上げ時に前回開いていたページを開く設定にしている場合など)
いずれも、以下のようなエラーが出て通信が正常に行われなかった。
Failed to load resource: the server responded with a status of 419 (unknown status)
原因
当然といえば当然ですが、トークンの有効期限が過ぎたのが原因だと思われる。
Laravelのトークンのデフォルトの有効期限は120分。
対策
対策というほどの事ではないですが、419エラーを受け取ったらページをリロードするようにしました。
$.ajax({ type: "GET", url: "request.php", data: { 'データ': data }, dataType: "json", scriptCharset: 'utf-8', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }) .then( function (param) { // 通信後の処理 }, function (XMLHttpRequest, textStatus, errorThrown) { // トークンエラー処理 if (XMLHttpRequest.status == '419') { // リロード location.reload(); } });
あと、メタタグを忘れずに。
<meta name="csrf-token" content="{{ csrf_token() }}">
-
前の記事
【Laravel6.0】ログイン機能を実装(ついでに日本語化) 2020.01.01
-
次の記事
【Laravel6.0】データベースへのアクセスから操作方法まで(マイグレーションなど) 2020.02.15
コメントを書く