我正在使用Laravel 5开发应用程序。我的应用程序已连接VendHQ API,我打算通过其Webhook从VendHQ获取一些数据。根据他们的Documentation
[发生事件并触发网络挂钩时,我们将发送POST请求到您选择的URL。 POST请求将位于UTF-8字符集,以及application / x-www-form-urlencoded编码。
问题是,当他们尝试向我的Laravel应用发送POST请求时,没有在他们的发布请求中添加CSRF令牌,VerifyCsrfToken
中间件正在寻找令牌,最后它抛出TokenMismatchException
。
我的问题是,如何使某些特定路由避免使用默认的VerifyCsrfToken
中间件,同时保持其他发布请求的活动状态?
默认情况下,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中,这有点变了。现在,您可以在类的$except
数组中简单地添加要从csrftoken验证中排除的路由。
'VerifyCsrfToken'(\ app \ Http \ Middleware \ VerifyCsrfToken.php):
class VerifyCsrfToken extends BaseVerifier { protected $except = [ // Place your URIs here ]; }
示例:
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:例如:
将路线添加到App\Http\Middleware\VerifyCsrfToken.php
文件: