LaravelでJavaScriptからポストした際に出たエラーの整理です。
目次
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
以下のエラーが出たときは、CSRFトークンが付いていないことが原因です。
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
Cross Site Request Forgery protection = クロスサイトリクエストフォージャリ
クロスサイトリクエストフォージェリ(Cross site request forgeries、略記:CSRF、またはXSRF)は、WWW における攻撃手法のひとつである。 具体的な被害としては、掲示板に意図しない書き込みをさせられたり、オンラインショップで買い物をさせられたりするなどが挙げられる。
Laravelのログ、laravel.logには以下のように出力されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
TokenMismatchException in VerifyCsrfToken.php line 53: in VerifyCsrfToken.php line 53 at VerifyCsrfToken->handle(object(Request), object(Closure)) at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 at ShareErrorsFromSession->handle(object(Request), object(Closure)) at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62 at StartSession->handle(object(Request), object(Closure)) at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59 at EncryptCookies->handle(object(Request), object(Closure)) at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 at CheckForMaintenanceMode->handle(object(Request), object(Closure)) at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in Kernel.php line 122 at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87 at Kernel->handle(object(Request)) in index.php line 54 |
対策として以下のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$.ajax({ beforeSend: function (xhr) { return xhr.setRequestHeader('X-CSRF-TOKEN', "{{csrf_token()}}"); }, data: { "idstrings": idstrings.toString() }, error: function (data) { alert(data.responseText); }, type: 'POST', url: 'aaa' }); |
ポイントはこれです。
beforeSend: function (xhr) {
return xhr.setRequestHeader('X-CSRF-TOKEN', "{{csrf_token()}}");
},
Failed to load resource: the server responded with a status of 422 (Unprocessable Entity)
以下のエラーが出たときは、Request validationに引っかかっているようです。
Failed to load resource: the server responded with a status of 422 (Unprocessable Entity)
Laravelのホームディレクトリから
app\Http\Requests
にクラスから、rules()を確認します。
エラーが出れば、常にログを確認する。
最後まで読んでいただきありがとうござました。
この記事が気に入っていただけたらシェアしてくれると嬉しいです。
コメント