【发布时间】:2021-04-05 05:41:25
【问题描述】:
我正在使用 Laravel 8,并且一直在尝试遵循 SPA authentication 的 sanctum 文档。我已经完成了所需的必要配置的设置。后端服务器使用默认端口(80)在 localhost 上运行,而 SPA 客户端在 localhost:3000 上运行。我正在使用 nuxt 框架为带有 axios 的客户端发出请求。
应向 /sanctum/csrf-cookie 发出初始请求以初始化 CSRF 保护 cookie,这是网络流量显示的内容
第二个请求是应该包含第一个域请求发送的 cookie 的实际请求,但看起来 XSRF-TOKEN 被跳过了。这是网络流量的样子
sanctum.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,
],
];
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,
];
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',
];
我在 nuxt.config.js 中设置了这个
export default {
axios: {
withCredentials: true,
baseURL: 'http://localhost/',
},
}
谁能告诉我为什么 XSRF-TOKEN cookie 没有被发回?
谢谢
【问题讨论】:
-
目前没有回复,你能分享更多信息吗? cors.php 和 session.php 会有所帮助。