fix: 세션 만료 시 화면 전체가 오류로 멈춤 — 무효/만료 자격증명은 401로 응답, 프론트는 토큰 제거 후 로그인 화면
세션 토큰(24h)이 만료되면 백엔드가 403을 돌려주는데 프론트는 401만 로그아웃 처리해 만료된 토큰을 계속 보내며 모든 패널이 '유효하지 않은 API 키' 오류로 멈췄음. - require_api_key/optional_api_key: 무효 자격증명 → 401 (403은 권한 부족 전용 유지) - api.ts: 403이라도 '유효하지 않은 API 키' 메시지면 토큰 제거 → 로그인 화면 (구버전 백엔드 호환) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -82,10 +82,13 @@ async def require_api_key(api_key: str | None = Security(_api_key_header)) -> st
|
||||
)
|
||||
|
||||
if not is_valid_credential(api_key):
|
||||
# 401: 자격증명 자체가 무효(잘못된 키·만료된 세션) — 프론트가 저장된 토큰을
|
||||
# 지우고 로그인 화면으로 보내는 트리거. 403은 권한 부족(관리자 전용)에만 사용.
|
||||
# (세션 24h 만료 후 403이 돌아와 화면 전체가 오류로 멈추던 문제, 2026-09-22)
|
||||
logger.warning("[Security] API 키/세션 토큰 불일치 — 요청 거부")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="유효하지 않은 API 키입니다.",
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="유효하지 않은 API 키이거나 만료된 세션입니다. 다시 로그인하세요.",
|
||||
)
|
||||
|
||||
return api_key
|
||||
@@ -101,8 +104,8 @@ async def optional_api_key(api_key: str | None = Security(_api_key_header)) -> s
|
||||
|
||||
if not is_valid_credential(api_key):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="유효하지 않은 API 키입니다.",
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="유효하지 않은 API 키이거나 만료된 세션입니다. 다시 로그인하세요.",
|
||||
)
|
||||
return api_key
|
||||
|
||||
|
||||
Reference in New Issue
Block a user