在Laravel 5中,如何禁用特定路由的VerifycsrfToken中间件?

时间:2015-07-04 17:08:57

标签: php laravel laravel-5 csrf-protection

我使用Laravel 5开发应用程序。我的应用程序与VendHQ API相关联,我打算通过他们的webhook从VendHQ获取一些数据。根据他们的Documentation

  

当事件发生并触发webhook时,我们将发送一个POST   请求您选择的网址。 POST请求将在   UTF-8字符集和application / x-www-form-urlencoded编码。

问题是,当他们尝试向我的Laravel应用发送POST请求时,他们的帖子请求中没有添加CSRF令牌,而VerifyCsrfToken中间件正在寻找令牌,最后它会抛出{{1} }。

我的问题是,在保持其他帖子请求有效的同时,如何避免某些特定路由的默认TokenMismatchException中间件?

3 个答案:

答案 0 :(得分:16)

默认情况下,在Laravel 5中的所有路由上启用CSRF,您可以通过修改app / Http / Middleware / VerifyCsrfToken.php来禁用特定路由

//app/Http/Middleware/VerifyCsrfToken.php

//add an array of Routes to skip CSRF check
private $openRoutes = ['free/route', 'free/too'];

//modify this function
public function handle($request, Closure $next)
    {
        //add this condition 
    foreach($this->openRoutes as $route) {

      if ($request->is($route)) {
        return $next($request);
      }
    }

    return parent::handle($request, $next);
  }

source

答案 1 :(得分:8)

如果您使用的是5.2版,请访问:app / Http / Middleware / VerifyCsrfToken.php 您可以将路由添加到属性:protected $ except: 例如:

protected $except = [
'users/get_some_info',
];

部分用户将是您的控制器,“get_some_info”将是操作。 执行此更改后,请确保在routes.php。

中添加路由

答案 2 :(得分:3)

将您的路线添加到App\Http\Middleware\VerifyCsrfToken.php文件:

/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'route-name-1', 'route-name-2'
];