标题重写为:Nextjs가 _app.js를 감지하는지 확실하지 않습니다. 오류: useSession은 <SessionProvider />로 래핑되어야 합니다.
P粉771233336
2023-09-04 00:10:21
<p>저는 Nextjs, Prisma 및 Auth0에 대한 몇 가지 튜토리얼을 따라왔습니다. 내 문제는 헤더에 로그인/로그아웃 버튼을 생성하려고 시도한 후("next-auth/react" </code>에서 <code> 헤더에 <code>import { useSession,signIn,signOut }를 추가하여)입니다. .js</code> 파일) next.js<code>에 다음 오류가 발생합니다. 오류: [next-auth]: `useSession`은 <SessionProvider /></code>에 래핑되어야 합니다. 루트 폴더에 <code>_app.js</code> 파일을 만든 다음 <code>/pages/_app.js</code>에서 마지막으로 <code>/app/_app에 생성했습니다. .js</code>. 이들 중 어느 것도 작동하지 않습니다. </p>
<p>이것은 내<code>_app.js 파일의 내용입니다: </code></p>
<pre class="brush:php;toolbar:false;">"next-auth/react"에서 { SessionProvider } 가져오기
기본 함수 앱 내보내기({
요소,
pageProps: { 세션, ...pageProps },
}) {
반품 (
<SessionProvider 세션={세션}>
<구성요소 {...pageProps} />
</세션 제공자>
)
}</pre>
<p>Next가 이를 감지하고 사용하는지 어떻게 확인하나요? 파일이 어느 정도 무시되고 있는 것 같아요. </p>
<p>프로젝트의 루트 폴더에서 <code>_app.js</code> 파일의 위치를 <code>/pages/_app.js</code> 코드> ;app/_app.js . <code>.next</code> 폴더를 삭제하고 서버를 다시 실행해 보았지만 작동하지 않았습니다. </p>
<p><strong>업데이트 1: </strong>
내가 사용하고 있는 Next.js 버전: v13.4.4</p>
<p><strong>업데이트 2: </strong>
<code>console.log()</code> 함수를 <code>_app.js</code> 파일에 추가했는데 터미널에는 인쇄되지만 Firefox에서는 인쇄되지 않습니다. <code>_app.js</code> 감지가 정상인가요, 아니면 문제가 있나요? </p>
<p><strong>제가 (어느 정도) 고쳤습니다! 아래에서 내 답변을 확인하세요. 하지만 Vercel에 배포하면 작동하지 않습니다. </strong></p>
이 문제를 해결한 것 같습니다. _app.js는 잊어버리고 모든 것을 내 맞춤 레이아웃.js 파일에 넣기로 결정했습니다. header.js가layout.js 외부에 있으므로 사용자가 로그인 상태를 유지하는지 테스트해야 합니다.
해결 방법: 추가했습니다.
으아악에서
layout.js
(기본적으로 Next.js와 함께 제공되는 파일)로 이동하고 "내보내는" 함수의 매개변수에 세션을 전달합니다(기본 함수 RootLayout이 내보내집니다). 그런 다음 모든 return() 매개변수를 .이것은 코드의 일부입니다:
으아악중요 부분:
'use client'
选项,Next将不允许您导出元数据,因此您需要删除从代码中导出 const 元数据 = {...을 사용하는 경우.UPDATE: 어떤 이유로 Vercel에서는 작동하지 않습니다(로컬에서 실행되더라도). 문제를 해결하고 답변을 업데이트하려고 노력하겠습니다. TL;DR: 이 솔루션은 로컬에서는 작동하지만 Vercel에 배포하면 작동하지 않습니다.