Next.js 13.3.1 버전으로 개인프로젝트를 진행하던 중 Google OAuth로그인시 문제가 발생하였다. run dev로 실행한 상태에서는 오류가 발생하지 않았는데 실제 환경과 비슷한 환경에서 테스트 해보기위해 build 후 start시켜 next/auth에 설정해둔 signIn 페이지에서 OAuth로그인을 하려고 하니까 아래와 같은 오류가 발생하였다......
[next-auth][error][CLIENT_FETCH_ERROR]
https://next-auth.js.org/errors#client_fetch_error fetch failed {
error: {
message: 'fetch failed',
stack: 'TypeError: fetch failed\n' +
' at Object.fetch (node:internal/deps/undici/undici:11413:11)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)',
name: 'TypeError'
},
url: 'http://localhost:3000/api/auth/providers',
message: 'fetch failed'
}
이를 해결하기 위해 Next.js 버전을 낮춰보기도하고 next-auth 라이브러리의 버전도 낮춰보고 코드에 잘못된 것은 없는지 다시 디버깅 해보고.... 3~4시간을 이 오류에 소비하였다. ㅠㅠ
문제 발생 원인
해당 문제 원인은 정확히 모르겠지만 99% next-auth 라이브러리의 버그인 것 같다. next-auth를 사용하는 다른 사람들은 env 파일에 설정 해야하는 NEXTAUTH_URL에 http://localhost:3000을 넣어도 별 문제가 없었던 것 같기 때문이다(next, next-auth 버전에 따라 차이가 있을수도...).
그래도 디버깅하며 찾은 결과는 next-auth라이브러리에 있는 getProviders 함수에서 OAuth Provider 정보를 가져오지 못해서 발생한 오류였다.
해결 방법
문제를 해결하기 위해 stackoverflow부터 공식문서까지 꼼꼼히 찾아보았으나 내가 해결한 글은 저 둘과는 거리가먼 일반 블로그 글이었다.
우측에 있는 링크가 해결을 도와준 글이다. https://ntalam.com/2023/01/15/client_fetch_error-nextjs-nextauth/
Client_Fetch_Error, Nextjs, NextAuth - Nallib Tala
Changing the following worked for me to
ntalam.com
바로 env에 있는 NEXTAUTH_URL키에 값을 localhost가 아닌 127.0.0.1로 주는 방법이었다.
// .env.local
NEXTAUTH_URL=http://127.0.0.1:3000
NEXTAUTH_SECRET=블라블라
이와같이 적용하니 이제는 다른 문제가 발생하였다 ㅎㅎㅎㅎㅎㅎㅎ 구글 로그인에 엑세스할 수 없다는 문제였다. 이제서야 감이 와서 Google Cloude에 등록한 프로젝트의 OAuth정보에 redirection URI 정보에 새로 지정한 주소인 127.0.0.1을 추가 해주었다.
http://127.0.0.1:3000/api/auth/callback/google
드디어... 문제없이 잘 동작하게 되었다. 진짜 이 오류놈을 해결하려고 next랑 next-auth 버전을 내려가며 빌드하고 실행해보고...
next-auth 공식문서에서 next13.2 버전 이상에서는 /app/api/auth/[...nextauth]/route.ts 경로에 next-auth를 설정하면 된다고 하였는데 아직 안정화가 안되서 오류가 나는건가 싶어 기존에 지원하던 pages/api/auth/[...nextauth].js 디렉터리에서 작업도 해보고 별짓을 다 해보았다... 다신 보지말자 이놈아
'study > Next.js' 카테고리의 다른 글
Next.js - App router Error Handling(오류 처리) (0) | 2024.04.29 |
---|---|
Next.js 13 - Warning: Prop `style` did not match. Server 오류 (0) | 2023.04.20 |
Next.js 13 - ReferenceError: window is not defined 오류 (0) | 2023.04.17 |