Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5中,如何禁用特定路由的VerifycsrfToken中间件?_Php_Laravel_Laravel 5_Csrf - Fatal编程技术网

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

Php 在Laravel 5中,如何禁用特定路由的VerifycsrfToken中间件?,php,laravel,laravel-5,csrf,Php,Laravel,Laravel 5,Csrf,我正在使用Laravel 5开发一个应用程序。我的应用程序与VendHQ API连接,我打算通过他们的webhook从VendHQ获取一些数据。根据他们的 当事件发生并触发webhook时,我们将发送一篇帖子 请求您选择的URL。POST请求将在 UTF-8字符集和application/x-www-form-urlencoded编码 问题是,当他们试图向my Laravel应用发送POST请求时,他们的POST请求中没有添加CSRF令牌,VerifyCsrfToken中间件正在寻找令牌,最后它

我正在使用Laravel 5开发一个应用程序。我的应用程序与VendHQ API连接,我打算通过他们的webhook从VendHQ获取一些数据。根据他们的

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

问题是,当他们试图向my Laravel应用发送POST请求时,他们的POST请求中没有添加CSRF令牌,
VerifyCsrfToken
中间件正在寻找令牌,最后它抛出了一个
令牌不匹配异常


我的问题是,在保持其他post请求处于活动状态的同时,如何避免某些特定路由的此默认
VerifyCsrfToken
中间件?

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

//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);
  }

在拉威尔5中,这有点不对劲。现在,您只需在类的
$except
数组中添加要从csrftoken验证中排除的路由即可

“VerifyCsrfToken”(\app\Http\Middleware\VerifyCsrfToken.php):

示例:

1.如果您使用的是管线组: 您的
$except
数组如下所示:

protected $except = ['api/v2/users/valid'];
protected $except = ['users/valid'];
protected $except = ['users/*'];
2.如果您使用的是简单路线 您的
$except
数组如下所示:

protected $except = ['api/v2/users/valid'];
protected $except = ['users/valid'];
protected $except = ['users/*'];
3.如果要排除主路由下的所有路由(本例中的用户) 您的
$except
数组如下所示:

protected $except = ['api/v2/users/valid'];
protected $except = ['users/valid'];
protected $except = ['users/*'];

请参阅:

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

例如:

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

执行此更改后,请确保在routes.php中添加路由。

将路由添加到
App\Http\Middleware\VerifyCsrfToken.php
文件:

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

您使用的是Laravel 5还是5.1?@Alexandros Its Laravel 5您还可以使用通配符作为
'*用户/获取一些信息*'
使用
protected$except=['/specificroutes*]的方法是非常有用的知识