【问题标题】:Ajax Post to Laravel - CSRF Token MismatchAjax 发布到 Laravel - CSRF 令牌不匹配
【发布时间】:2017-01-25 03:33:51
【问题描述】:

我正在尝试使用 ajax 将数据发布到 Laravel 后端,但是我收到“CSRF 令牌不匹配”错误。

首先,我在 html 中放置了标记(在正文中但在其表单之外,因为它不是整个表单,它只有 2 个要发布的元素):

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

然后在“文档准备好”中,我尝试使用 ajax 发布数据。

data["_token"] = jQuery('#token').val();  

// Also tried this:
jQuery.ajaxSetup({
       headers: {
           'X-CSRF-TOKEN': jQuery('#token').val()
       }
})

console.log(data) // returns the array with _token: "esOKmY8Tpr4UvhTYMhWcWui0rpvYEjJ3es7ggics"

jQuery.ajax({
     type: "POST",
     url: '/my-route',
     data: data,
     success: function() {
          console.log("A");
     }
});

我要发布的数据是较大表单的一小部分,使用这种方法,我可以自动完成表单。一小部分 html 输入不在任何其他子表单中。也许是这种情况?

- Form:
- A: bla // to be posted
- B: hello  // to be posted
- C: smt else // no post

但获取值工作正常

路线:

Route::post('/my-route', 'AdminController@theFunction')-&gt;middleware('admin');


编辑:我把&lt;input&gt;改成了&lt;meta&gt;标签

【问题讨论】:

  • 你能告诉我们你的路线吗?
  • 这个问题看起来像 Origin Policy 是错误的。在正常情况下,Laravel CSRF 应该是开箱即用的,没有任何技巧。
  • 管理员中间件是否进行了重定向?
  • 我最终取消了管理页面的 csrf。

标签: javascript php jquery ajax laravel


【解决方案1】:

我遇到了同样的问题 尝试在您的meta 中添加包含 CSRF 标记,就像这样

<meta name="csrf-token" content="{{ csrf_token() }}" />

并像这样在您的 ajax 代码中读取它:

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>

上次更新

请像这样修改你的 url 变量:

jQuery.ajax({
    type: "POST",
    url: '/my-route'+'?_token=' + '{{ csrf_token() }}',
    data: data,
    success: function() {
         console.log("A");
    }
  });

【讨论】:

  • 我完全按照你说的做了。又是 csrf 令牌不匹配错误。我记录了$('meta[name="csrf-token"]').attr('content'),它成功记录了令牌,但令牌不匹配错误仍然存​​在。不幸的是,这不是答案:/
  • 为什么不尝试从中间件中排除这条路由?
  • 尝试在发送前将其添加到您的 ajax 请求中:function(request) { return request.setRequestHeader("X-CSRF-Token", $("meta[name='token']"). attr('内容')); },
  • 你能把它添加到上面的答案部分吗?我没有在这里得到如何实现它
  • 很抱歉我已经修改了请看一下
【解决方案2】:

试试这个

var formData = new FormData(); formData.append("_token", "{{ csrf_token() }}"); $.ajax({ 标题:{ 'X-CSRF-TOKEN':“{{ csrf_token() }}” }, 网址:'save_search', 数据:表格数据, 处理数据:假, 类型:'POST', 成功:函数(数据){ 警报(数据); } });

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2015-12-20
    • 2014-11-04
    • 1970-01-01
    • 2020-07-08
    • 2016-12-10
    • 2016-09-20
    • 2020-01-20
    • 2020-06-17
    相关资源
    最近更新 更多