Ajax 发布到 Laravel - CSRF 令牌不匹配

问题描述 投票:0回答:3

我正在尝试使用 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')->middleware('admin');


编辑:我将

<input>
更改为
<meta>
标签

javascript php jquery ajax laravel
3个回答
10
投票

我也遇到了同样的问题 尝试将 CSRF 标签放入您的

meta
中,如下所示

<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");
    }
  });

4
投票

试试这个


    var formData = new FormData();
    formData.append("_token", "{{ csrf_token() }}");
    $.ajax({
    标题:{
    'X-CSRF-TOKEN': "{{ csrf_token() }}"
    },
    url: '保存搜索',
    数据:表单数据,
    处理数据:假,
    类型:'发布',
    成功:函数(数据){
    警报(数据);
    }
    });


0
投票

我在 Laravel 8 中遇到了一个问题,我注意到令牌是通过我的 AJAX 请求在 URL 中发送的,并且 URL 是正确的。

尽管如此,我仍然收到错误。经过进一步调查,我意识到我已经改变了我的

'same_site'

的值

会话.php

归档为“无”。

将其改回

'same_site' => "lax"
后,我就解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.