LaravelでCSRFトークン検証からURIを除外する方法


  1. ミドルウェアを使用する方法: Laravelのミドルウェアを使用すると、CSRFトークン検証を除外したいURIに対して特定のミドルウェアを作成できます。例えば、VerifyCsrfTokenミドルウェアを拡張し、除外したいURIを指定します。
// app/Http/Middleware/CustomCsrfMiddleware.php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class CustomCsrfMiddleware extends BaseVerifier
{
    protected $except = [
        'uri-to-exclude',
        'another-uri-to-exclude',
    ];
}

そして、App\Http\Kernelクラスの$middleware配列にカスタムミドルウェアを追加します。

// app/Http/Kernel.php
protected $middleware = [
    // 他のミドルウェア
    \App\Http\Middleware\CustomCsrfMiddleware::class,
];
  1. ルートミドルウェアを使用する方法: Laravelでは、ルート単位でミドルウェアを指定することもできます。ルートファイル(通常はroutes/web.phpまたはroutes/api.php)でルートを定義する際に、exceptメソッドを使用して特定のURIを除外します。
// routes/web.php
Route::post('/uri-to-include', 'Controller@method')->name('include-route');
Route::middleware('csrf')->except([
    'uri-to-exclude',
    'another-uri-to-exclude',
])->group(function () {
    // CSRFトークン検証を行うルート
    // ...
});
  1. ルートミドルウェアを使用してミドルウェアクラスを直接指定する方法: ルートミドルウェアを使用する代わりに、ルート定義内で直接ミドルウェアクラスを指定することもできます。
// routes/web.php
Route::post('/uri-to-include', 'Controller@method')->name('include-route');
Route::post('uri-to-exclude', 'Controller@method')->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
Route::post('another-uri-to-exclude', 'Controller@method')->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
// CSRFトークン検証を行うルート
// ...

上記の方法のいずれかを使うことで、特定のURIに対してCSRFトークン検証を除外することができます。必要に応じて、uri-to-excludeanother-uri-to-excludeの部分を実際のURIに置き換えてください。