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 令牌不匹配异常