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.2中控制多个ajax请求

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常

JavaScrpit中异步请求Ajax实现

Laravel:routes/api.php 或 routes/web.php 中的 AJAX 请求端点?

使用Laravel 5.4请求Ajax

Ajax(jquery) 同时处理多个异步请求