問題:
我的下一個身份驗證在本地作業,但是當我將其部署到 Netlify 時,我在訪問任何內容時都會收到此 CLIENT_FETCH_ERROR(RouteGuard 組件呼叫 useSession 掛鉤并在非公共路徑上未經身份驗證 && 時推送到 /auth/signin)。
獲取https://website.com/api/auth/session 400 --> 錯誤:NextAuth.js 不支持 HTTP GET 的此操作
[next-auth][error][CLIENT_FETCH_ERROR] 意外令牌“E”,“錯誤:Thi”... 不是有效的 JSON
發布https://website.com/api/auth/_log 400
它在本地呼叫 http://localhost:4200/api/auth/session 并回傳 304 和 {}。
呼叫 useSession 鉤子的地方:
_app > 會話提供者 session={session} > RouteGuard
根據檔案的預期 API 回傳:
https://next-auth.js.org/getting-started/client#getsession
呼叫時,getSession() 將向 /api/auth/session 發送請求并回傳帶有會話物件的承諾,如果不存在會話,則回傳 null。
https://next-auth.js.org/getting-started/rest-api#get-apiauthsession
回傳客戶端安全的會話物件 - 如果沒有會話,則回傳一個空物件。回傳的會話物件的內容可通過會話回呼進行配置。
會話回呼:
async session({ session, token, user }) {
session.accessToken = token.accessToken
session.user._id = token.sub
session.user.name = token.name
session.user.email = token.email
if (token.login_provider) session.user.login_provider = token.login_provider
return session
}
我已經在本地和 Netlify 上檢查過的內容:
- [...nextauth].ts 正確放置在 /pages/api/auth 檔案夾中
- 它的名稱與我上面寫的完全一樣
- NEXTAUTH_URL 設定正確(不使用任何自定義 basePath)
- 使用 Next.js Runtime - v4.27.3 也會自動設定它,盡管它的設定方式沒有區別
- NEXT_PUBLIC_API_URL 設定正確(相同的 url /api)
- NEXTAUTH_SECRET 設定正確
- NextAuthOptions 物件的頁面:{ signIn: '/auth/signin' } 是正確的
- /pages/auth/signin 頁面已正確放置和命名
- 憑據、Google 和 Facebook 提供商環境變數設定正確
"next": "11.1.0", "next-auth": "^4.6.1",
我還應該檢查什么?
一直在谷歌搜索,閱讀檔案,重新閱讀檔案并嘗試一切都無濟于事一天......
請幫忙 /o\
更新:
- 做了一些更多的研究,我不知道這是否重要,但是 localhost 上的請求是通過 cookie 發送的,而這些 cookie 不會在部署的版本上發送:
next-auth.csrf-token
next-auth.callback-url
更新 2:
- getProviders 在 Netlify 上的 getServerSideProps 中不起作用,因為我猜它不喜歡 SSR
uj5u.com熱心網友回復:
通過使用 [email protected] 和 [email protected] 的精確版本來修復它。
在這里找到解決方案:https ://answers.netlify.com/t/nexauth-returning-action-not-found/77779/5
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520715.html
