我在 Laravel 中有一個(gè)帶有 Sanctum 的後端 API,在 NuxtJS 中有單獨(dú)的儲(chǔ)存庫 SPA
我正在嘗試透過 Sanctum 驗(yàn)證我的 SPA。我正在嘗試按照 Sanctum 文件在瀏覽器中獲取 CSRF cookie。
問題是當(dāng)我呼叫 Sanctum 提供的 CSRF 令牌端點(diǎn)時(shí),我得到了正確的回應(yīng),但沒有設(shè)定 cookie。就這樣,沒有錯(cuò)誤。我是否要使用 nuxt auth 或只是普通的舊 axios 呼叫並不重要。
這就是我所擁有的:
網(wǎng)域:API -publisher.local:8080;前端-publisher.local:3000
NUXT 驗(yàn)證設(shè)定
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 設(shè)定
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() ))),
會(huì)話.php
'domain' => env('SESSION_DOMAIN', '.local'),
我嘗試了這些設(shè)定的不同組合和變體,但都不起作用。你們知道可能出了什麼問題嗎?
我想我已經(jīng)明白了這一點(diǎn)。我讓它工作了。
因此 .local
不能是頂級域,我認(rèn)為這可能是問題的一部分,但我不確定。
將網(wǎng)域變更為舊的 localhost
可以解決問題,但此解決方案有一個(gè)問題。由於某些我不知道的原因,無論我呼叫哪個(gè)端點(diǎn),我都會(huì)在對 API 的任何呼叫中自動(dòng)取得 XSRF cookie。奇怪。
最有效的方法是將網(wǎng)域變更為 api.publisher.com
和 publisher.com
,然後變更 Sanctum 文件中的所有設(shè)定。
對網(wǎng)域要格外小心,確保它們符合並且設(shè)定正確。重新配置那個(gè)東西非常容易,但很難診斷它!
希望有幫助!