7个项目和VueJs2 这是我的VueJs2代码
mounted: function() {
if(this.edit != null)
{
var token = document.head.querySelector('meta[name="csrf-token"]');
console.log(token);
$.ajax({
type:'POST',
url: path+'get_voucher_data',
data: [{'_token':token}],
success:(data) => {
console.log(data);
}
});
}
}
POST http://localhost/test/public/get_voucher_data 419 (unknown status)
这也是我的刀片服务器代码:
<meta name="csrf-token" content="{{ csrf_token() }}">
有人知道为什么会这样吗,我该如何解决?
答案 0 :(得分:2)
Laravel有一个名为VerifyCsrfToken
的中间件,默认情况下已启用。它确保所有POST请求都具有csrf令牌。该令牌可确保仅从我们的应用程序发送请求,而不是从任何第三方抓取工具或表单提交工具发送请求。
当控制器未在请求中获得_token时,它将引发错误。
似乎您正在尝试发送邮件,但并非毫无疑问。更新为此:
var token = $('meta[name="csrf-token"]').attr('content');
data: {
_token : token
},
当前您关注的是未正确发送令牌的情况:
data: [{'_token':token}]
更容易的配置:
您可以设置jquery ajax而不是在每个ajax请求中发送_token:
$.ajaxSetup({
data: {
_token: $('meta[name="csrf-token"]').attr('content')
}
});
然后每个ajax请求将自动具有此功能,无需在每个ajax请求数据中再次指定它。
答案 1 :(得分:1)
尝试将令牌放在标头上
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
答案 2 :(得分:-1)
您还可以在主体中发送令牌。确保您将其作为json,JSON.stringify正文发送,并将内容类型添加到标头中。
fetch("/route-to-post", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
_token: token
})
})