laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?
Posted
技术标签:
【中文标题】laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?【英文标题】:CSRF token mismatch error in laravel 5 on multiple async ajax request? 【发布时间】:2016-07-26 14:19:01 【问题描述】:我将 Laravel 5.2 用于我的 Web 应用程序,并且我有一个页面,其中包含同一事件的多个 ajax 请求。在 $.ajax 中,我设置了 async: true,有时它会显示 CSRF 令牌不匹配错误并重定向到登录页面。但是,当我在 ajax 中设置 Async: false 时,它可以正常工作,但需要很多时间。
请帮助我,使其不会显示令牌不匹配错误。
【问题讨论】:
【参考方案1】:请像这样修改你的 url 变量:
url: '/my-route'+'?_token=' + ' csrf_token() ',
【讨论】:
【参考方案2】:你说你使用
$.ajaxSetup( headers: 'X-CSRF-Token' : $('meta[name=_token]').attr('content') );
也许请求覆盖中的某个标头,尝试更改它
$.ajaxSetup(
beforeSend: function(xhr)
xhr.setRequestHeader('X-CSRF-Token', $('meta[name=_token]').attr('content') );
);
【讨论】:
我已经使用了上面的代码,但问题仍然存在。 :( :(【参考方案3】:在你的表单中创建一个隐藏的文件名_token你可以使用这个辅助方法来生成字段
!! csrf_field() !!
在 javascript 中,您必须获取此字段值
var token = $( "input[name='_token']" ).val();
$.ajax(
method: "POST",
url: "some.php",
data: name: "John", location: "Boston",_token:token
);
另一种方法是创建隐藏的 span 或 div 向其添加数据属性
<div id="token" data-token=" csrf_token() "></div>
获取javascript数据值
var token = $( "#token" ).data('token');
$.ajax(
method: "POST",
url: "some.php",
data: name: "John", location: "Boston",_token:token
);
【讨论】:
我已经在我的 app.blade.php 和 $.ajaxSetup( headers: 'X-CSRF-Token' : $('meta[name=_token]').attr('content') );但是,它不起作用。我一次发送了一堆 ajax 请求,有些请求失败了。他们何时成功和失败是随机的。以上是关于laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?的主要内容,如果未能解决你的问题,请参考以下文章
本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常