我在 Laravel 中有一个带有 Sanctum 的后端 API,在 NuxtJS 中有单独的存储库 SPA
我正在尝试通过 Sanctum 验证我的 SPA。我正在尝试按照 Sanctum 文档在浏览器中获取 CSRF cookie。
问题是当我调用 Sanctum 提供的 CSRF 令牌端点时,我得到了正确的响应,但没有设置 cookie。就这样,没有错误。我是否要使用 nuxt auth 或者只是普通的旧 axios 调用并不重要。
这就是我所拥有的:
域名:API -publisher.local:8080;前端-publisher.local:3000
NUXT 身份验证配置
auth: {
strategies: {
laravelSanctum: {
provider: 'laravel/sanctum',
url: 'http://publisher.local:8080',
endpoints: {
login: { url: '/api/v1/login', method: 'post' },
// logout: { url: '/auth/logout', method: 'post' },
// user: { url: '/auth/user', method: 'get' }
}
},
},
},
AXIOS 配置
axios: {
baseURL: 'http://publisher.local:8080/api/v1', // Used as fallback if no runtime config is provided
credentials: true,
proxy: true,
},
神圣.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1,local:3000',
Sanctum::currentApplicationUrlWithPort()
))),
会话.php
'domain' => env('SESSION_DOMAIN', '.local'),
我尝试了这些设置的不同组合和变体,但都不起作用。你们知道可能出了什么问题吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我想我已经明白了这一点。我让它工作了。
因此
.local不能是顶级域,我认为这可能是问题的一部分,但我不确定。将域名更改为旧的
localhost可以解决问题,但此解决方案有一个问题。由于某些我不知道的原因,无论我调用哪个端点,我都会在对 API 的任何调用中自动获取 XSRF cookie。奇怪。最有效的方法是将域名更改为
api.publisher.com和publisher.com,然后更改 Sanctum 文档中的所有设置。对域名要格外小心,确保它们匹配并且设置正确。重新配置那个东西非常容易,但很难诊断它!
希望有帮助!