【问题标题】:CSRF token mismatch error in laravel 5 on multiple async ajax request?laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?
【发布时间】:2016-07-26 14:19:01
【问题描述】:

我将 Laravel 5.2 用于我的 Web 应用程序,并且我有一个页面,其中包含同一事件的多个 ajax 请求。在 $.ajax 中,我设置了 async: true,有时它会显示 CSRF 令牌不匹配错误并重定向到登录页面。但是,当我在 ajax 中设置 Async: false 时,它​​可以正常工作,但需要很多时间。

请帮助我,使其不会显示令牌不匹配错误。

【问题讨论】:

    标签: ajax laravel asynchronous token


    【解决方案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 请求,有些请求失败了。他们何时成功和失败是随机的。
      猜你喜欢
      • 2015-12-20
      • 2014-11-04
      • 2017-05-02
      • 2016-09-20
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2016-06-25
      • 2020-05-10
      相关资源
      最近更新 更多