Ich habe eine Backend-API mit Sanctum in Laravel und ein separates Repository-SPA in NuxtJS
Ich versuche, mein SPA bei Sanctum zu verifizieren. Ich versuche, der Sanctum-Dokumentation zu folgen, um das CSRF-Cookie im Browser zu erhalten.
Das Problem ist, dass ich beim Aufruf des von Sanctum bereitgestellten CSRF-Token-Endpunkts die richtige Antwort erhalte, das Cookie jedoch nicht gesetzt ist. Das war's, keine Fehler. Es spielt keine Rolle, ob ich Nuxt Auth oder einfach nur alte Axios-Aufrufe verwenden möchte.
Das habe ich:
Domainname: API-publisher.local:8080; front-end-publisher.local:3000
NUXT-Authentifizierungskonfiguration
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-Konfiguration
axios: { baseURL: 'http://publisher.local:8080/api/v1', // Used as fallback if no runtime config is provided credentials: true, proxy: true, },
sacred.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() ))),
session.php
'domain' => env('SESSION_DOMAIN', '.local'),
Ich habe verschiedene Kombinationen und Variationen dieser Einstellungen ausprobiert, aber nichts hat funktioniert. Wisst ihr, was falsch sein könnte?
我想我已经明白了这一点。我让它工作了。
因此
.local
不能是顶级域,我认为这可能是问题的一部分,但我不确定。将域名更改为旧的
localhost
可以解决问题,但此解决方案有一个问题。由于某些我不知道的原因,无论我调用哪个端点,我都会在对 API 的任何调用中自动获取 XSRF cookie。奇怪。最有效的方法是将域名更改为
api.publisher.com
和publisher.com
,然后更改 Sanctum 文档中的所有设置。对域名要格外小心,确保它们匹配并且设置正确。重新配置那个东西非常容易,但很难诊断它!
希望有帮助!