繁体   English   中英

Laravel令牌不匹配偶尔

[英]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/*', ];

发生这种情况的原因很可能是以下原因之一:

  1. 您闲置了太长时间–默认情况下,CSRF令牌在15分钟内有效,我没记错。

  2. 您忘记了将令牌传递给后端。 只需在请求中添加X-CSRF-TOKEN标头即可完成此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM