Skip to content

[FEATURE] Auth #23

@myoungjugo

Description

@myoungjugo

#️⃣ 요청 유형

해당되는 항목을 선택해주세요.

  • 새로운 기능 추가
  • 기존 기능 개선
  • 성능 개선

#️⃣ 어떤 기능인가요?

계정 보안 및 사용자 편의성 강화를 위한 Auth 서비스 확장

  • 이메일 인증 체계 완비: 회원가입 후 이메일 중복 검사, 인증 메일 재전송, 일회성 토큰을 이용한 이메일 인증(HTML 응답) 구현.

  • 비밀번호 재설정 플로우: 비밀번호 망실 시 이메일 기반 임시 토큰 발급 및 새 비밀번호 등록 기능.

  • 토큰 갱신 시스템: Access Token 만료 시 로그인 없이 권한을 연장할 수 있는 Refresh Token 로직 도입.

  • 상세 에러 핸들링: 유저 미존재(400), 비번 불일치(400), 미인증(403), 중복 인증(409) 등 상태 코드 세분화.

#️⃣ 이 기능이 필요한 이유는 무엇인가요?

  • 보안성 확보: 비밀번호를 직접 DB에 대조하지 않고 해시화하여 저장하며, 이메일 인증을 거친 사용자만 서비스 접근을 허용하기 위함입니다.

  • 사용자 경험(UX) 개선: 로그인 실패 시 사유를 명확히 전달하고, 비밀번호 분실 시 스스로 계정을 복구할 수 있는 경로를 제공합니다.

  • 시스템 무결성: 동일 이메일 중복 가입을 방지하고, 토큰의 용도(인증용/재설정용)를 분리하여 권한 오남용을 막기 위함입니다.

구현 방안 (선택)

  • Layered Architecture: Repository(DB), Service(Logic), Router(API), Schema(Validation)로 계층을 분리하여 유지보수성을 높임.

  • JWT 기반 인증: PyJWT를 사용하여 용도별(scope/type) 토큰을 생성하고 만료 시간을 다르게 설정.

  • HTML Response: 이메일 클라이언트에서 접근 시 사용자에게 시각적인 피드백을 주기 위해 HTMLResponse를 활용한 웹 페이지 렌더링 적용.

#️⃣ 작업 상세 내용

  • AuthRepository: 유저 및 보안 정보(Shadow) 조회를 위한 CRUD 메서드 구현
  • AuthService: 9개 기능에 대한 비즈니스 로직 및 Sphinx 스타일 Docstring 작성
  • AuthRouter: 명세서 기반 상태 코드(201, 400, 401, 403, 404, 409) 매핑 및 엔드포인트 연결
  • AuthSchema: Pydantic을 활용한 입력값 유효성 검사 및 응답 규격 정의
  • EmailService: 인증 및 비밀번호 재설정 링크 발송 로직 연동
  • html_template : HTML 페이지 유저에게 내려주기 위해 app/templates/verify_html_template 파일 추가
  • hopscotch로 테스트

📎 참고할만한 자료 (선택)

https://www.notion.so/31a5e8b0d11880eda16fe76d40f85bf8

관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions