laravelでPOSTのajax通信が上手くいかない


事象

POSTでajax通信しようとしたところ「419 (unknown status)」が発生した。

原因

laravelでPOST通信する際はパラメータにCSRFトークンを設定する必要がある。
https://readouble.com/laravel/5.5/ja/csrf.html

修正方法

POSTパラメータにCSRFトークンを追加するかCSRF保護から使用するURIを除外する。

▼POSTパラメータにCSRFトークンを追加する

  • headタグ内に下記metaタグを追加
bladeファイル
<meta name="csrf-token" content="{{ csrf_token() }}">
  • ajaxのheadersにCSRFトークンを追加
jsファイル
$.ajax({
    url: '{URL}',
    type:'POST',
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    
})

▼CSRF保護から使用するURIを除外する

  • CSRF保護の除外リストに対象のURIを追加する。
app/Http/Middleware/VerifyCsrfToken.php
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        // CSRF保護から除外するURIを記載
    ];
}