본문 바로가기
Q&A해결2026년 4월 30일1분 읽기

NextAuth v4 → Auth.js v5 올렸더니 세션이 자꾸 끊깁니다

인
인증담당
조회 424댓글 2

NextAuth v4에서 Auth.js v5로 올렸습니다. 마이그레이션 가이드 따라 했는데 로그인은 되지만 새로고침하면 자주 로그아웃됩니다. 5분 정도 후엔 거의 100% 끊겨요.

네트워크 탭 보면 /api/auth/session이 빈 객체를 반환합니다.

댓글 2

김김영삼6개월 전

v4 → v5 마이그레이션에서 가장 흔히 만나는 증상입니다. 원인 후보 4가지:


1) AUTH_SECRET 변경


v4의 NEXTAUTH_SECRET이 v5에서는 AUTH_SECRET으로 바뀌었습니다. 둘 다 설정돼 있어도 다른 값이면 세션 토큰을 디코드 못 합니다.


# .env.local
AUTH_SECRET=your-32-char-random-string
# NEXTAUTH_SECRET은 제거

2) trustHost 누락 (Vercel 외부 호스팅)


// auth.ts
export const { handlers, auth } = NextAuth({
trustHost: true, // ← Vercel 외에서 필수
// ...
})

3) 쿠키 도메인·sameSite


// 다중 서브도메인 사용 시
cookies: {
sessionToken: {
name: '__Secure-authjs.session-token',
options: {
httpOnly: true,
sameSite: 'lax',
domain: '.youngsam.net', // ← 점 prefix 중요
secure: true,
},
},
}

4) 미들웨어에서 token 갱신 누락


// middleware.ts
import { auth } from '@/auth'

export default auth(async (req) => {
// v5에서는 session token이 자동으로 sliding window 갱신됨
// 단, middleware에서 auth()가 호출돼야 함
return NextResponse.next()
})

export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
}

가장 흔한 원인은 1번(AUTH_SECRET 이름 변경 누락)이에요. printenv | grep -i secret로 확인해보세요.

인인증담당(guest)6개월 전
2번이 원인이었네요. Vercel이 아니라 자체 EC2에 올리고 있는데 trustHost가 누락돼서 호스트네임 검증에서 막혔던 것 같습니다. true로 바꾸니 안정적으로 유지됩니다. 감사합니다!
Ctrl+Enter로 등록