首頁  >  問答  >  主體

Laravel Sanctum & NuxtJS SPA無法在瀏覽器中建立csrf cookie

我在 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'),

我嘗試了這些設定的不同組合和變體,但都不起作用。你們知道可能出了什麼問題嗎?

P粉512363233P粉512363233334 天前543

全部回覆(1)我來回復

  • P粉311563823

    P粉3115638232023-12-14 00:56:05

    我想我已經明白了這一點。我讓它工作了。

    因此 .local 不能是頂級域,我認為這可能是問題的一部分,但我不確定。

    將網域變更為舊的 localhost 可以解決問題,但此解決方案有一個問題。由於某些我不知道的原因,無論我呼叫哪個端點,我都會在對 API 的任何呼叫中自動取得 XSRF cookie。奇怪。

    最有效的方法是將網域變更為 api.publisher.compublisher.com,然後變更 Sanctum 文件中的所有設定。

    對網域要格外小心,確保它們符合並且設定正確。重新配置那個東西非常容易,但很難診斷它!

    希望有幫助!

    回覆
    0
  • 取消回覆