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

ser*_*tow 10 csrf laravel vue.js csrf-token

我在 Laravel 中遇到 csrf 令牌问题。有时请求 POST(通过 axios)返回419代码“CSRF 令牌不匹配”,但请求标头包含 CSRF 和 XSRF 令牌。有趣的是,这在隐身模式下不会发生。

在此输入图像描述

应用程序刀片:

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

bootstrap.js:

window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';


let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
Run Code Online (Sandbox Code Playgroud)

内核.php:

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\Localization::class,
        ],
Run Code Online (Sandbox Code Playgroud)

我尝试清除缓存和配置,但没有结果。有什么想法如何修复它吗?

Kev*_*nch 10

我遇到了这个问题。原因是 axios 标头未设置。将它们设置在组件内的轴对象上也没有解决问题。定义对象后设置标头解决了我的问题。

在刀片视图中添加以下内容:

<script>window.Laravel = {csrfToken: '{{ csrf_token() }}'}</script>
Run Code Online (Sandbox Code Playgroud)

在 bootstrap.js 文件中,声明后window.axios = require('axios');添加以下内容:

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = window.Laravel.csrfToken;
Run Code Online (Sandbox Code Playgroud)


Kha*_*leh 1

有时?!听起来像一个expired token

当您在 工作时incognito tabs,您有一个新的令牌。

location.reload()当你得到419 error code并且一切顺利时尝试一下。