Laravel CSRF 令牌不匹配异常。通过 jQuery ajax 向资源路由发送“Put”请求

Posted

技术标签:

【中文标题】Laravel CSRF 令牌不匹配异常。通过 jQuery ajax 向资源路由发送“Put”请求【英文标题】:Laravel CSRF token mismatch exception. Sending "Put" request to a resource route via jQuery ajax 【发布时间】:2020-09-29 10:42:04 【问题描述】:

我需要向定义为的资源路由发送 PUT 请求:

Route::resource('posts','PostController');

我的代码可以像这样正常工作:

            var data = $(this).serializeArray();
            data.push( name:'_token',value:" csrf_token() " )
            $.ajax(
                type: "Put",
                url: _url,
                data: data,
                dataType: "json",
                success: function (response) 
                    if(response.status)
                        toastr.success(response.msg);
                    
                    else
                        toastr.warning(response.msg);
                    
                ,
            );

但是当我不得不通过路由发送文件时问题就来了,因为我不得不将我的提交函数修改为:

          var data = new FormData(this);
          data.append("_token"," csrf_token() ");
          var _url = $(this).attr('action');
          $.ajax(
            type: "Put",
            url: _url,
            data: data,
            dataType: "json",
            processData:    false,
            contentType:    false,
            success: function (response) 
              if(response.status)
               toastr.success(response.msg);
              
            

我遇到了异常消息“CSRF 令牌不匹配”。这是因为我使用了FormData() 吗?

【问题讨论】:

【参考方案1】:

在刀片中添加 csrf

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

然后通过标头发送它以避免通过附加数据发送它

$.ajaxSetup(
        headers: 
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        
    );

并删除此行data.append("_token"," csrf_token() "); 并尝试

【讨论】:

以上是关于Laravel CSRF 令牌不匹配异常。通过 jQuery ajax 向资源路由发送“Put”请求的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.5 的验证 csrf 令牌中没有收到错误令牌不匹配异常

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

为啥我在 laravel 中运行测试时收到“CSRF 令牌不匹配”?

AWS Cloudfront 导致 CSRF 令牌不匹配异常

Laravel + Vue.js (axios) - CSRF 令牌不匹配

使用 laravel-cors 和 axios 进行 POST 的 Laravel “CSRF 令牌不匹配”