laravel 419(未知状态)

Awa*_*zer 1 token laravel vue.js

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);
             }
        });
   }
}
Run Code Online (Sandbox Code Playgroud)

但我有这个错误: 在此处输入图片说明

POST http://localhost/test/public/get_voucher_data 419 (unknown status)
Run Code Online (Sandbox Code Playgroud)

另外,这是我的刀片代码:

<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会发生这种情况,我该如何解决?

Mih*_*nde 7

Laravel 有一个名为的中间件VerifyCsrfToken,默认启用。它确保所有 POST 请求都有一个 csrf 令牌。此令牌确认请求从我们的应用程序,而不是发送来自任何第三方刮刀或形式submiting工具。

当控制器没有在请求中获得 _token 时,它会抛出错误。

看起来您正在尝试发送但不正确。更新到这个:

var token = $('meta[name="csrf-token"]').attr('content');

data: {
   _token : token 
},
Run Code Online (Sandbox Code Playgroud)

目前您关注的是未正确发送令牌的内容:

data: [{'_token':token}]
Run Code Online (Sandbox Code Playgroud)

更简单的配置:

您可以设置 jquery ajax ,而不是在每个 ajax 请求中发送 _token :

$.ajaxSetup({
    data: {
        _token: $('meta[name="csrf-token"]').attr('content')
    }
});
Run Code Online (Sandbox Code Playgroud)

那么每一次ajax请求都会自动有这个,不需要在每一次ajax请求数据中再次指定。