我在 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'),
我尝试了这些设置的不同组合和变体,但都不起作用。你们知道可能出了什么问题吗?
我想我已经明白了这一点。我让它工作了。
因此
.local
不能是顶级域,我认为这可能是问题的一部分,但我不确定。将域名更改为旧的
localhost
可以解决问题,但此解决方案有一个问题。由于某些我不知道的原因,无论我调用哪个端点,我都会在对 API 的任何调用中自动获取 XSRF cookie。奇怪。最有效的方法是将域名更改为
api.publisher.com
和publisher.com
,然后更改 Sanctum 文档中的所有设置。对域名要格外小心,确保它们匹配并且设置正确。重新配置那个东西非常容易,但很难诊断它!
希望有帮助!