Laravel Sanctum XSRF-TOKEN Cookie 未发送

Mic*_*win 0 laravel-sanctum nuxtjs

我正在使用 Laravel 8,并且一直在尝试遵循SPA 身份验证的 sainttum 文档。我已经完成了所需的必要配置设置。后端服务器在默认端口 (80) 的 localhost 上运行,而 SPA 客户端在 localhost:3000 上运行。我正在使用 nuxt 框架为带有 axios 的客户端发出请求。

应向 /sanctum/csrf-cookie 发出初始请求以初始化 CSRF 保护 cookie,以下是网络流量显示的内容

在此输入图像描述

第二个请求是实际请求,应包含第一个域请求发送的 cookie,但看起来 XSRF-TOKEN 被跳过。网络流量如下所示

在此输入图像描述

sainttum.php 配置文件:

<?php
return [
    'stateful' => explode(',', env(
        'SANCTUM_STATEFUL_DOMAINS',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1'
    )),
    'expiration' => null,
    'middleware' => [
        'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
        'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
    ],
];
Run Code Online (Sandbox Code Playgroud)

cors.php 配置文件:

<?php
return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*', 'localhost:3000'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => ['XSRF-TOKEN', 'X-XSRF-TOKEN'],
    'max_age' => 0,
    'supports_credentials' => true,
];
Run Code Online (Sandbox Code Playgroud)

session.php 配置文件

<?php

use Illuminate\Support\Str;

return [
    'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => env('SESSION_LIFETIME', 120),
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => env('SESSION_CONNECTION', null),
    'table' => 'sessions',
    'store' => env('SESSION_STORE', null),
    'lottery' => [2, 100],
    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),
    'path' => '/',
    'domain' => env('SESSION_DOMAIN', null),
    'secure' => env('SESSION_SECURE_COOKIE'),
    'http_only' => true,
    'same_site' => 'lax',
];
Run Code Online (Sandbox Code Playgroud)

我在 nuxt.config.js 中设置了这个

export default {
  axios: {
    withCredentials: true,
    baseURL: 'http://localhost/',
  },
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么 XSRF-TOKEN cookie 没有被发回吗?

谢谢

Mic*_*win 5

事实证明,问题是由 axios 模块的 nuxt 配置引起的。我刚刚将“withCredentials”字段替换为“credentials”。

现在这是更新后的 nuxt.config.js:

axios: {
    credentials: true,
    baseURL: 'http://localhost/api/',
  },
Run Code Online (Sandbox Code Playgroud)