当* not *以*开头时,Laravel路由过滤器?

时间:2015-08-11 00:05:22

标签: php laravel laravel-4

现在我已经

Route::when('*', 'csrf', ['post']);

在我的routes.php文件中,以保护我免受CSRF攻击。在filters.php我有:

Route::filter('csrf', function()
{
    if (Session::token() !== Input::get('_token'))
    {
        throw new Illuminate\Session\TokenMismatchException;
    }
});

我现在遇到的问题是我正在使用第三方服务(Google Calendar API)进行集成,并将其POST回我的网站,这当然会导致CSRF保护。

如何针对特定路径前缀禁用该过滤器,例如/gapi

2 个答案:

答案 0 :(得分:1)

您需要定义 2个路线组并应用 csrf 并将 CSRF 过滤器应用于其中之一。通过这种方式,您可以将需要启用 CSRF 保护的路线与那些不需要保护的路线分开。

这对你有用:

Route::filter('csrf', function() {
  if (Request::method() == 'POST' && Session::token() !== Input::get('_token')) {
    throw new Illuminate\Session\TokenMismatchException;
  }
});

Route::group(array('before' => 'csrf'), function() {
  // here define all routes that need CSRF protection enabled 
});

Route::group(array(), function() {
  // here define all routes that do not need CSRF protection
});

您可以在 Laravel 4.2 中详细了解路线分组的工作原理:http://laravel.com/docs/4.2/routing#route-groups

答案 1 :(得分:0)

您还可以排除以特定网址开头的路线:

Route::whenRegex('#(?!gapi/)#A', 'csrf', ['post']);