特定のルートをCSRFトークンチェックを除外する

この投稿の内容は Laravel 5.1 以降のバージョンにおいて利用できます。

Laravel で外部からの Webhook を受けたいときなど、特定のルートだけCSRFトークンのチェックをバイパスする必要性がある場合があります。WebhookプロバイダはCSRFトークンを知るわけがなく、扱えませんから。

本来ならば必要なルートをそもそもVerifyCsrfTokenミドルウェアがかからないように別途定義したほうがいいようなものですが、VerifyCsrfTokenミドルウェアはwebのルート全体にかけるべきでもあるためWebhookのためだけに分けたルーティングを定義するのも面倒なだけ。

デフォルトのVerifyCsrfTokenミドルウェアを利用している場合、それ(app/Http/Middleware/VerifyCsrfToken.php)の$exceptに以下のように除外するルートを追加します。この除外URIはRequest::is(Str::is)に渡されるため、必要に応じて*によるワイルドカード指定が可能です。

 

See also

Laravel 5.5 CSRF保護

readouble.com