Next.js
Next.js 서버 컴포넌트가 로그인 직후 이전 쿠키를 읽은 리다이렉트 문제
로그인 직후 보호 페이지가 다시 로그인 화면으로 돌아간 원인을 요청 경계에서 찾은 기록
새로고침하면 정상이라 더 헷갈렸다
로그인 API는 200을 반환했고 브라우저에도 쿠키가 보였지만, 이동한 서버 컴포넌트는 세션이 없다고 판단했다. 네트워크 탭에서 Set-Cookie와 다음 요청의 Cookie를 나눠 보니 클라이언트 상태가 바뀐 것과 서버가 새 쿠키를 읽는 것은 별개였다.
확인한 코드와 수정 기준
import { cookies } from 'next/headers'
const session = (await cookies()).get('session')?.value
router.push 직후 화면 상태만 갱신하던 흐름을 서버 액션과 보호 페이지의 새 요청으로 바꿨다. 인증 판단은 React 상태가 아니라 서버 요청의 쿠키만 기준으로 삼았다. Secure, SameSite, 도메인도 배포 환경에서 다시 비교했다.
재현 체크리스트
- 로그인 응답의
Set-Cookie확인 - 보호 페이지 요청의
Cookie확인 - 로그아웃 뒤 새로고침으로 접근 차단 확인
- 로컬과 배포의 쿠키 속성 비교
타이밍을 늦추는 임시 setTimeout보다 어느 요청이 인증의 기준인지 고정하는 편이 오래갔다.