在Laravel 5中,如何禁用特定路由的 VerifycsrfToken 中间件?
In Laravel 5, How to disable VerifycsrfToken middleware for specific route?
我正在使用 Laravel 5 开发应用程序。我的应用程序与 VendHQ API 连接,我打算通过他们的 webhook 从 VendHQ 获取一些数据。根据他们的 Documentation
When an event happens and triggers a webhook, we’ll send a POST
request to a URL of your choosing. The POST request will be in the
UTF-8 charset, and application/x-www-form-urlencoded encoding.
问题是,当他们尝试向我的 Laravel 应用程序发送 POST 请求时,他们的 post 请求和 VerifyCsrfToken
中间件中没有添加 CSRF 令牌正在寻找一个令牌,最后它抛出一个 TokenMismatchException
。
我的问题是,如何避免某些特定路由的默认 VerifyCsrfToken
中间件,同时保持其他 post 请求处于活动状态?
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);
}
在 Laravel 5 中,这有点变化。现在您可以简单地在 class
的 $except
数组中添加要从 csrftoken 验证中排除的路由
'VerifyCsrfToken' (\app\Http\Middleware\VerifyCsrfToken.php):
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
// Place your URIs here
];
}
示例:
1。如果您使用的是路由组:
Route::group(array('prefix' => 'api/v2'), function()
{
Route::post('users/valid','UsersController@valid');
});
您的 $except
数组如下所示:
protected $except = ['api/v2/users/valid'];
2。如果您使用的是简单路线
Route::post('users/valid','UsersController@valid');
您的 $except
数组如下所示:
protected $except = ['users/valid'];
3。如果要排除主路由下的所有路由(本例中为用户)
您的 $except
数组如下所示:
protected $except = ['users/*'];
参见:http://laravel.com/docs/master/routing#csrf-excluding-uris
如果您使用的是 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 开发应用程序。我的应用程序与 VendHQ API 连接,我打算通过他们的 webhook 从 VendHQ 获取一些数据。根据他们的 Documentation
When an event happens and triggers a webhook, we’ll send a POST request to a URL of your choosing. The POST request will be in the UTF-8 charset, and application/x-www-form-urlencoded encoding.
问题是,当他们尝试向我的 Laravel 应用程序发送 POST 请求时,他们的 post 请求和 VerifyCsrfToken
中间件中没有添加 CSRF 令牌正在寻找一个令牌,最后它抛出一个 TokenMismatchException
。
我的问题是,如何避免某些特定路由的默认 VerifyCsrfToken
中间件,同时保持其他 post 请求处于活动状态?
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);
}
在 Laravel 5 中,这有点变化。现在您可以简单地在 class
的$except
数组中添加要从 csrftoken 验证中排除的路由
'VerifyCsrfToken' (\app\Http\Middleware\VerifyCsrfToken.php):
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
// Place your URIs here
];
}
示例:
1。如果您使用的是路由组:
Route::group(array('prefix' => 'api/v2'), function()
{
Route::post('users/valid','UsersController@valid');
});
您的 $except
数组如下所示:
protected $except = ['api/v2/users/valid'];
2。如果您使用的是简单路线
Route::post('users/valid','UsersController@valid');
您的 $except
数组如下所示:
protected $except = ['users/valid'];
3。如果要排除主路由下的所有路由(本例中为用户)
您的 $except
数组如下所示:
protected $except = ['users/*'];
参见:http://laravel.com/docs/master/routing#csrf-excluding-uris
如果您使用的是 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'
];