localdisk

PHP とか Java とか Web とか好きなことを書きます。

すべてのPOSTリクエストに対してCSRFフィルターを適用する

Laravel のフィルターって本来はこう書くわけですが

<?php
Route::post('user/register', ['before' => 'csrf', function()
{
    return 'You are over 200 years old!';
}]);

POST するたびにいちいち before… とか書きたくない。漏れがあったらやだし。なのでちょっとぐぐってみたところ stackoverflow の記事がひっかかりました。

php - Laravel 4 CSRF on all POST requests - Stack Overflow

…なんか苦肉の策感がすごい。いやいや、もうちょっとどうにかなるだろ、と思って調べてみたらどうにかなったよ。

こんな感じ。自力でフィルターを呼んでやるわけです。コメントにも書いてますが $request->getRealMethod() とすれば POST / PUT / DELETE / PATCH のリクエストの際にも CSRF のフィルターが呼ばれます。

追記

コントローラーでやりたい人はこうすればOK.
CSRF on all POST requests (Controller-based) | Laravel-Tricks.com