【问题标题】:Laravel 5.8 show CSRF token mismatch when submit ajax POSTLaravel 5.8 在提交 ajax POST 时显示 CSRF 令牌不匹配
【发布时间】:2021-03-19 09:11:20
【问题描述】:
  1. 我已经在标题视图中添加了代码,如下所示
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
</head>
  1. 我的ajax代码如下
$.ajaxSetup({
          headers:
          {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          }
 });
 $.ajax({
          method: "POST",
          url: "{{ route('ProgresOps.store') }}",
          data: form_data,contentType: false,       // The content type used when sending data to the server.
          cache: false,             // To unable request pages to be cached
          processData: false,
        })
        .done(function(data){
          toastr.success('Data saved.');
});

但是当我提交数据的时候结果是csrf mismatch,我没有找到解决办法

exception: "Symfony\Component\HttpKernel\Exception\HttpException"
file: "C:\xampp74new\htdocs\swms\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php"
line: 208
message: "CSRF token mismatch."

【问题讨论】:

  • 你的 Ajax 代码在刀片模板中吗?
  • 是的,视图刀片内部的 javascript
  • 尝试在 ajax 函数本身内添加标头。
  • 我试过了,结果还是一样的CSRF token不匹配
  • ProgresOps 是资源路线吗?如果是,那么为什么要添加 Route::post('/store', 'ProgresOpsController@store')->name('store'); ?

标签: php ajax laravel csrf-token


【解决方案1】:

有很多方法,只需尝试一下(直接发送带有数据的 csrf 令牌)

data: {
        "_token": "{{ csrf_token() }}",
     }

【讨论】:

    【解决方案2】:

    有两种可能:

    1. 来自 Ajax 的请求不匹配 CSRF 令牌参数,通过将 CSRF 令牌参数添加到您的请求来解决它 $.extend( query, { '_token' : 'your csrf token' });

    2. cookie 中的 XSRF-TOKEN 不匹配。就我而言,我通过更改config\session.php 中的配置解决了这个问题 将安全配置从 true 更改为 false

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,ajax 请求在本地而不是在 https 上的服务器上运行良好,尽管在 ajax 设置中的标头中传递了令牌并尝试了所有其他解决方案但没有运气,@Giangimgs 的回答给了我提示,我的罪魁祸首是 http_only 值在 config/sessions.php 中设置为 true,我将其更改为 false,并且在实时服务器上一切正常。 screenshot of value to be set to false

      【讨论】:

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