我一直在關註一些關於 Nextjs、Prisma 和 Auth0 的教程。我的問題是,在嘗試在標題上建立登入/登出按鈕後(透過將import { useSession,signIn,signOut } 從「next-auth/react」
新增到 header.js
檔案),下一步.js 出現以下錯誤Error: [next-auth]: \`useSession\` 必須包裝在\
中。我嘗試在根資料夾中創建_app.js
文件,然後在/pages/_app.js
處創建,最後在/app/_app
處創建,最後在/app/_app .js
處創建。這些都不起作用。
這是my_app.js檔案的內容:
import { SessionProvider } from "next-auth/react" export default function App({ Component, pageProps: { session, ...pageProps }, }) { return () }
如何確保 Next 正在檢測並使用它?我認為該文件在某種程度上被忽略了。
我嘗試將_app.js
檔案的位置從專案的根資料夾更改為/pages/_app.js
,最後更改為 ;app/_app.js
。我還嘗試刪除 .next
資料夾並重新運行伺服器,但它不起作用。
更新 1: 我正在使用的 Next.js 版本:v13.4.4
更新 2: 我已將 console.log()
函數新增至 _app.js
檔案中,並將其列印到終端,但不在 Firefox 上。 _app.js
檢測正常還是有問題?
我(有點)修復了它!檢查下面我的答案。但部署到 Vercel 時它不起作用。
我想我已經解決了這個問題,我決定忘記 _app.js 並將所有內容放在我的自訂 layout.js 檔案中。我仍然需要測試使用者是否會保持登入狀態,因為 header.js 位於 layout.js 之外。
我是如何解決的:我加入了
到
layout.js
(預設情況下Next.js附帶的檔案)並在正在「匯出」的函數的參數中傳遞會話(匯出預設函數RootLayout)。然後我用 包裹了所有的 return() 參數。這是部分程式碼:
重要部分:如果您使用
'use client'
選項,Next將不允許您匯出元數據,因此您需要刪除從程式碼中匯出const 元數據= {...。更新:由於某種原因,它無法在 Vercel 上運行(即使它在本地運行)。我會嘗試修復它,然後更新我的答案。TL;DR:此解決方案在本機上運行,但部署到 Vercel 時不起作用。