作成日:
LaravelのCSRF保護の除外設定
Laravelのバージョンは9です。
CSRFトークンの有効期限切れ
POSTメソッドで検索パラメータを渡す画面があり、CSRF保護の影響で長時間放置すると419 PAGE EXPIREDエラーになってしまうので対策。
expire_on_closeをtrueにしてSESSION_LIFETIMEを大きい値にするという手もありますが、今回はSESSION_LIFETIMEを変えずにCSRF保護を部分的に除外する方法をとったときの設定です。
公式ドキュメントの日本語訳であるCSRF保護を参考にしました。
ミドルウェアの設定
app/Http/Kernel.phpで\App\Http\Middleware\VerificationCsrfTokenの設定がされています。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
これを削除する手もありますが、すべてのCSRF保護がなくなってしまうためここの設定は変更しません。
特定のURIを除外する
app/Http/Middleware/VerifyCsrfToken.phpで除外設定できます。
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
$exceptに除外するURIを設定すればOKです。