Google 로그인을 하면 첫 번째 시도에서 error=Configuration 에러가 뜬다.
근데 다시 시도하면 된다. 뭐지?
https://mory.blog/api/auth/error?error=Configuration매번 이러니까 사용자 경험이 뚝뚝 떨어진다.
NextAuth v5로 업그레이드하면서 환경변수 이름이 바뀌었다.
v4 | v5 |
|---|---|
|
|
나는 NEXTAUTH_SECRET만 설정해놓고 AUTH_SECRET은 안 넣었다.
NextAuth v5는 NEXTAUTH_SECRET을 안 읽는다.
이게 재밌는 부분이다.
AUTH_SECRET이 없으면 NextAuth가 임시 secret을 자동 생성한다.
문제는 Vercel 같은 serverless 환경에서는 요청마다 다른 인스턴스가 처리할 수 있다는 거다.
OAuth 플로우를 보면:
1. 로그인 버튼 클릭
2. NextAuth가 state 토큰 생성 (secret으로 암호화)
3. Google로 리다이렉트
4. Google 인증 완료
5. 콜백으로 돌아옴
6. NextAuth가 state 검증 (secret으로 복호화)2번과 6번이 다른 인스턴스에서 실행되면?
인스턴스 A: 임시 secret = "abc123..."으로 암호화
인스턴스 B: 임시 secret = "xyz789..."으로 복호화 시도 → 실패!두 번째 시도에서는 운 좋게 같은 인스턴스가 warm 상태로 처리해서 성공하는 거다.
warm 상태는 인스턴스가 한번 실행되었으니 이전에 사용했던 인스턴스를 사용하게 된다.
(처음 요청 시에는 cold 상태이다)
Vercel 대시보드 + 로컬 .env에 추가:
AUTH_SECRET=<기존 NEXTAUTH_SECRET 값>끝. 재배포하면 해결된다.
NextAuth v4 → v5 마이그레이션 시 환경변수 이름 체크하자
serverless 환경에서는 인스턴스 간 상태 공유가 안 된다는 걸 기억하자
"두 번째엔 되네?"는 보통 race condition이나 인스턴스 문제다