feat: 비밀번호 찾기/재설정 API 구현 (#66) #67

Merged
seonkyu.kim merged 2 commits from feature/#66-password-reset into develop 2026-02-10 02:08:04 +00:00
Owner

📋 작업 요약

  • 비밀번호 찾기 API (재설정 토큰 발송)
  • 비밀번호 재설정 API (토큰 검증 후 비밀번호 변경)

Closes #66

🛠️ 작업 내용 (Changes)

  • SPMS.Application/DTOs/Account/PasswordForgotRequestDto.cs — 비밀번호 찾기 요청 DTO (email)
  • SPMS.Application/DTOs/Account/PasswordResetRequestDto.cs — 비밀번호 재설정 요청 DTO (email, reset_token, new_password)
  • SPMS.Application/Interfaces/IAuthService.cs — ForgotPasswordAsync, ResetPasswordAsync 추가
  • SPMS.Application/Services/AuthService.cs — 비밀번호 찾기/재설정 로직 구현
  • SPMS.API/Controllers/PasswordController.cs — Route: v1/in/account/password, [AllowAnonymous]

📢 리뷰어 참고 사항 (To Reviewers)

  • #64 (이메일 인증 인프라)에 의존 — ITokenStore, IEmailService 사용
  • forgot: 보안상 이메일 미존재 시에도 동일한 성공 응답 반환 (이메일 열거 공격 방지)
  • 재설정 토큰 TTL: 30분, UUID 형식
  • 에러코드: ResetTokenError (122)

체크리스트 (Self Checklist)

  • 빌드(Build)가 성공적으로 수행되었는가?
  • 모든 단위 테스트(Unit Test)를 통과하였는가?
  • 불필요한 로그나 주석을 제거하였는가?
  • 컨벤션(Clean Architecture, Naming)을 준수하였는가?
  • 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가?

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - 비밀번호 찾기 API (재설정 토큰 발송) - 비밀번호 재설정 API (토큰 검증 후 비밀번호 변경) ## 🔗 관련 이슈 (Related Issues) Closes #66 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Application/DTOs/Account/PasswordForgotRequestDto.cs` — 비밀번호 찾기 요청 DTO (email) - [x] `SPMS.Application/DTOs/Account/PasswordResetRequestDto.cs` — 비밀번호 재설정 요청 DTO (email, reset_token, new_password) - [x] `SPMS.Application/Interfaces/IAuthService.cs` — ForgotPasswordAsync, ResetPasswordAsync 추가 - [x] `SPMS.Application/Services/AuthService.cs` — 비밀번호 찾기/재설정 로직 구현 - [x] `SPMS.API/Controllers/PasswordController.cs` — Route: v1/in/account/password, [AllowAnonymous] ## 📢 리뷰어 참고 사항 (To Reviewers) - #64 (이메일 인증 인프라)에 의존 — ITokenStore, IEmailService 사용 - forgot: 보안상 이메일 미존재 시에도 동일한 성공 응답 반환 (이메일 열거 공격 방지) - 재설정 토큰 TTL: 30분, UUID 형식 - 에러코드: ResetTokenError (122) ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 2 commits 2026-02-10 01:57:00 +00:00
- ITokenStore, IEmailService 인터페이스 정의
- InMemoryTokenStore (IMemoryCache 기반), ConsoleEmailService (로그 출력) 구현
- SignupAsync에 6자리 인증 코드 생성/저장/발송 로직 추가
- VerifyEmailAsync 구현 (코드 검증 → EmailVerified 업데이트)
- POST /v1/in/auth/email/verify 엔드포인트 추가
- DI 등록 (ITokenStore, IEmailService, MemoryCache)
- PasswordForgotRequestDto, PasswordResetRequestDto 생성
- IAuthService에 ForgotPasswordAsync, ResetPasswordAsync 추가
- ForgotPasswordAsync: UUID 토큰 생성 → ITokenStore 저장(30분) → 이메일 발송
- ResetPasswordAsync: 토큰 검증 → BCrypt 해싱 → 비밀번호 저장
- PasswordController 생성 (v1/in/account/password)
- 보안: forgot에서 이메일 미존재 시에도 동일한 성공 응답
seonkyu.kim self-assigned this 2026-02-10 01:57:09 +00:00
seonkyu.kim added this to the Phase 2-1: 인증 & 계정 & 서비스 API milestone 2026-02-10 01:57:12 +00:00
seonkyu.kim added the
Priority
Medium
Status
In Progress
Type
Feature
labels 2026-02-10 01:57:18 +00:00
seonkyu.kim requested review from Owners 2026-02-10 01:57:25 +00:00
seonkyu.kim added 1 commit 2026-02-10 02:07:20 +00:00
seonkyu.kim merged commit 808a42de14 into develop 2026-02-10 02:08:04 +00:00
seonkyu.kim deleted branch feature/#66-password-reset 2026-02-10 02:08:28 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-10 02:10:25 +00:00
Sign in to join this conversation.
No description provided.