laravel 419(状态未知)

时间:2019-02-22 16:43:45

标签: laravel vue.js token

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

但是我有这个错误: enter image description here

POST http://localhost/test/public/get_voucher_data 419 (unknown status)

这也是我的刀片服务器代码:

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

有人知道为什么会这样吗,我该如何解决?

3 个答案:

答案 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
    })
})