搜尋

首頁  >  問答  >  主體

無法在前端使用Laravel Sanctum來產生CSRF cookie

<p>最近我嘗試在Nuxt 3中使用Laravel Sanctum進行身份驗證,但在初始的CSRF cookie握手過程中遇到了問題。問題是,在我向<code>http://localhost:8000/sanctum/csrf-cookie</code>路徑發出請求後,瀏覽器沒有設定XSRF-TOKEN cookie。我已經困在這個問題上已經一個星期了,在互聯網上還沒有找到解決方案。 我嘗試使用Axios和Fetch API來設定XSRF-TOKEN,但沒有成功。我在後端使用的是<code>http://localhost:8000</code>,前端使用的是<code>http://localhost:3000</code>。 Laravel Sanctum本身運作正常,因為在Postman上測試時我收到了set-cookie頭部,但瀏覽器沒有收到。我在<code>.env</code>檔案中設定了以下屬性:</p> <pre class="brush:php;toolbar:false;">FRONTEND_URL=http://localhost:3000 SESSION_DOMAIN=localhost:3000 SESSION_DRIVER=cookie</pre> <p>我已經盡一切努力克服前端CORS請求的限制。我的fetch函數如下所示:</p> <pre class="brush:php;toolbar:false;">window.fetch('http://localhost:8000/sanctum/csrf-cookie', { credentials: 'include', }).then((response) => { console.log(…response.headers) })</pre> <p>我讀到將credentials設定為'include'可以解決問題,但即使這樣做,我仍然無法設定XSRF-TOKEN。我嘗試將credentials設定為'same-origin',但也不起作用。有人知道如何解決這個問題嗎? </p>
P粉099985373P粉099985373465 天前598

全部回覆(1)我來回復

  • P粉002546490

    P粉0025464902023-08-27 10:38:36

    問題是瀏覽器不會接受來自不同連接埠的cookie。

    由於您的後端運行在8000端口,前端運行在3000端口,後端提供的cookie將無法設置在前端上。

    因此,一個解決方法是僅為API端點停用CSRF保護。 您可以在VerifyCsrfToken中間件中進行此操作。

    將此行新增到您的$except陣列中,然後您就可以繼續了。

    回覆
    0
  • 取消回覆