Добавление этого в BaseController.php:
public function __construct() {
// Run the 'csrf' filter on all post, put, patch and delete requests.
$this->beforeFilter('csrf', ['on' => ['post', 'put', 'patch', 'delete']]);
}
или добавив это в route.php:
Route::when('*', 'csrf', array('post', 'put', 'patch', 'delete'));
Какой способ лучше и почему?
Оба будут иметь тот же эффект, но Router::when
подход кажется преференциальным.
Это довольно легко расширить неправильный контроллер или перегрузку BaseController::__construct()
без надлежащего parent::__construct()
вызов. В обоих случаях ошибки не возникнут. Если это произойдет случайно, у вас будет тихая дыра в безопасности:
class FooController extends App\BaseController
{
public function __construct()
{
$this->initializeSomething()
// somebody forgot to call parent::__construct()
}
public function action()
{
// no CSRF protection here!
}
}
Использование маршрутизатора выглядит менее подверженным ошибкам, и позже нет простого способа переопределить фильтр случайно.
Route::when('*', 'csrf', array('post', 'put', 'patch', 'delete'));
Других решений пока нет …