[英]Laravel Token Mismatch every once in a while
我有一个laravel应用程序,该应用程序在每个页面的字段中输出令牌。 然后,jQuery将令牌加载到每个Ajax请求中,如下所示: Laravel 5 CSRF全局令牌隐藏字段,用于页面中的所有表单
但是每隔一段时间,我会在ajax调用中收到TokenMismatch异常。.有时在网站闲置时间过长时发生,有时显然只是随机的。
关于如何调试的任何想法? 是什么原因引起的,或可能的解决方案?
我认为您不应该关闭Kernel.php文件上的VerifyCsrfToken中间件,因为此操作会引起攻击。 实际上,您需要使用令牌来保护对您网站的每个请求(不包括外部发布到我们网站的情况,例如:mandrill状态发布)。
设置元标记,如下所示
<meta name="csrf-token" content="{{ csrf_token() }}">
然后要求如下
$.ajax({
data: {data1:'data1',data2:'data2'},
url: '/your/url/goes/here',
type: 'POST',
beforeSend: function (request) {
return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
},
success: function(response){
console.log(response);
}
})
在您的主视图文件中添加以下html代码。
<meta name="csrf-token" content="{{ csrf_token() }}">
始终在JS文件或查看文件上使用以下脚本。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
如果需要执行AJAX请求,请关闭Kernel.php文件上的VerifyCsrfToken中间件。
您也可以编辑VerifyCsrfToken.php中间件文件以排除某些URL,如下所示:
/** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'ajax/*', 'api/*', ];
发生这种情况的原因很可能是以下原因之一:
您闲置了太长时间–默认情况下,CSRF令牌在15分钟内有效,我没记错。
您忘记了将令牌传递给后端。 只需在请求中添加X-CSRF-TOKEN
标头即可完成此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.