FastAPI - MiniProject - 문제발생

김기훈·2025년 10월 25일

부트캠프 프로젝트

목록 보기
7/39

1. 비밀번호를 뭐를 넣던간에 너무 길다고 오류

  • 비슷한 사례
    • “bcrypt 5.0.0이 릴리스된 이후 비밀번호가 실제로 짧았음에도 ‘… longer than 72 bytes’ 에러가 나타났음”
self._stub_requires_backend()
...
if detect_wrap_bug(IDENT_2A):
ValueError: password cannot be longer than 72 bytes

  • 원인: bcrypt 버전이 5.x 일 경우 호환 문제
  • 해결방법: poetry add bcrypt==4.3.0 버전 내리기

2. 로그아웃 코드 넣고 부터 다시 오류파티

(trapped) error reading bcrypt version
AttributeError: module 'bcrypt' has no attribute '__about__'
  • 문제1: 등록을 하면 실행이 안됨
    • 원인: bcrypt(4.x 이상) 버전부터 about.version 속성이 없어졌기 때문에
      passlib이 구버전용 코드를 실행하려다 에러
    • 해결: poetry add "bcrypt==3.2.2" 버전 내리기 (현제 4.3.0)
    • 로그아웃 코드를 넣기전에는 실행이 잘되었는데 왜 추가하고 나서 터지는가?
      • 로그아웃코드 때문은 아니고 로그아웃 기능을 추가함으로써 프로젝트가 전체 다시 실행 되고
      • 새로 임포트 되면서 pwd_context = CryptContext(schemes=["bcrypt"])가 초기화
      • 즉, 앱이 재시작되면서 bcrypt 버전 불일치가 표면화된 것

3. 등록 / 로그인 은 완전하게 작동하는데 로그아웃의 문제

  • 문제 1. 로그아웃을 진행하면 422 (token missing)이 발생

    • 원인: oauth2_scheme이 tokenUrl="/auth/login" 으로 설정되어 있는데,
      • 이걸 사용하는 엔드포인트(logout)에서 의존성 주입이 누락된 형태로 쓰였기 때문
      • 즉, get_current_user()가 토큰을 직접 받지 않고 있음
    • 해결: get_current_user(token: str):
      • get_current_user(token: str = Depends(oauth2_scheme)): 이렇게 변경
  • 문제 2. 422 해결했더니 401("Invalid token") 발생

    • 원인
        1. JWT가 잘못된 문자열
        1. Secret key 불일치
        1. 만료된 토큰
        1. 알고리즘 불일치
    • 4가지중 3번 만료된 토큰 문제였음 토큰 새로 생성해서 성공

4. 로그아웃이 postman에서는 가능한데 docs에서는 안됨

  • OAuth2PasswordBearer
    • 이거를 사용하면 docs에서 401만 뜸
  • HTTPBearer
    • 이거를 사용하니까 문제가 해결됨
  • 원인
    • Postman은 직접 Authorization → Bearer Token으로 토큰을 헤더에 넣으면
      • token: str = Depends(oauth2_scheme) 이 코드가 토큰을 읽고
        • jwt.decode() → payload 검증 → 통과
    • Swagger (docs)에서는 OAuth2PasswordBearer(tokenUrl="/auth/login")을 쓰면
      • Swagger는 “OAuth2 Password Flow 전체를 처리하는 UI”를 띄우는데
        • 이 UI는 로그인 요청 → 토큰 발급 → 헤더 삽입을 자동으로 해주지 않음
        • docs에서는 Authorization 헤더가 비어 있으니 FastAPI가 401 내보냄
        • 즉, Swagger가 “자동으로 토큰을 들고 가는” 걸 지원 안 하는 구조

OAuth2PasswordBearer 터미널에서 작동 확인하기

profile
안녕하세요.

0개의 댓글