문제 요약
로그인하지 않은 사용자가 보호된 페이지로 접근 시 /login으로 이동시키는 PrivateRoute를 적용했으나,
/login 페이지에서 계속 리다이렉트가 발생해 무한 루프가 생김.
문제원인해결
| 증상 | 원인 | 해결 |
| /login 페이지 접근 시 계속 /login으로 리다이렉트 | isAuthenticated 초기값이 false라서 로그인 여부 확인 전에도 PrivateRoute가 실행됨 | 로딩 상태(loading)를 추가해 인증 체크가 끝난 후에만 PrivateRoute 실행 |
| 공개 페이지에서도 PrivateRoute 동작 | /login 같은 공개 라우트를 PrivateRoute로 감쌈 | /, /login, /register 등 공개 페이지는 PrivateRoute에서 제외 |
1. 초기값 문제
- isAuthenticated가 false로 시작 → API 응답 오기 전에도 보호 페이지 로직 실행
- /login 접근 시에도 Navigate("/login") 실행 → 무한 반복
2. 로딩 상태 미처리
- /api/user/me 호출은 비동기
- 응답이 오기 전 보호 로직 발동 → 잘못된 리다이렉트 발생
- loading 상태를 두어 인증 체크 완료 후에만 라우팅 실행
요약
| PrivateRoute 사용 시 | 인증 체크가 끝나기 전에는 페이지 전환 금지 (로딩 상태 필수) |
| 공개 페이지 | /, /login, /register는 PrivateRoute에 포함하지 않기 |
| 상태 관리 | isAuthenticated 초기값만으로 라우팅 결정하지 말 것 |
'오류 해결 방법' 카테고리의 다른 글
| [web] 서버에서 생성한 데이터가 fetch된 JSON에 보이지 않음 (0) | 2025.09.02 |
|---|---|
| [web] 로그아웃 시 cors에러 해결 (0) | 2025.08.11 |
| [web] db 연결 오류 - jdbc.exceptions.CommunicationsException (db없음) (1) | 2025.08.06 |
| [web]spring, react 로 google 로그인 만들던 중 실수 모음 (3) | 2025.07.30 |
| [github] commit했지만 contributions 에 기록 안 될 때 (1일 1commit 잔디 안 심어짐) (0) | 2025.07.04 |