improvement: 이메일 인증/재전송 강화 (#205) #206

Merged
seonkyu.kim merged 1 commits from improvement/#205-email-verify-resend into develop 2026-02-25 01:40:57 +00:00
Owner

📋 작업 요약

  • verify API에 verifySessionId 기반 입력 지원 추가 (email 하위호환 유지)
  • 인증 시도 횟수 5회 제한 (30분 TTL) — 무차별 대입 차단
  • verify 응답에 verified, nextAction 필드 추가 — FE 분기 가능
  • 재전송 API 신규 추가 (POST /v1/in/auth/email/verify/resend)
  • 재전송 60초 쿨다운, 기존 코드 자동 무효화
  • email_verify TTL 1시간→5분 변경 (화면 UX "5분 유효" 일치)

Closes #205

🛠️ 작업 내용 (Changes)

  • SPMS.Domain/Common/ErrorCodes.cs — VerifyResendCooldown(116), VerifyAttemptExceeded(117) 추가
  • SPMS.Application/DTOs/Auth/EmailVerifyRequestDto.cs — verifySessionId 필드 추가, email optional화
  • SPMS.Application/DTOs/Auth/EmailVerifyResponseDto.cs신규 verified, nextAction
  • SPMS.Application/DTOs/Auth/EmailResendRequestDto.cs신규 verifySessionId
  • SPMS.Application/DTOs/Auth/EmailResendResponseDto.cs신규 resent, cooldownSeconds, expiresInSeconds
  • SPMS.Application/Interfaces/IAuthService.cs — VerifyEmailAsync 반환타입 변경, ResendVerificationAsync 추가
  • SPMS.Application/Services/AuthService.cs — VerifyEmailAsync 확장, ResendVerificationAsync 구현, TTL 5분 변경
  • SPMS.API/Controllers/AuthController.cs — verify 응답 변경, resend 엔드포인트 추가

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

  • verifySessionId 우선, email 하위호환 — 기존 호출 깨지지 않음
  • ITokenStore에 increment 미지원 → Get/Store 조합으로 시도 횟수 관리
  • 엔티티/DB 변경 없음

체크리스트 (Self Checklist)

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

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

dotnet build → 빌드했습니다. 경고 0개, 오류 0개
## 📋 작업 요약 - verify API에 verifySessionId 기반 입력 지원 추가 (email 하위호환 유지) - 인증 시도 횟수 5회 제한 (30분 TTL) — 무차별 대입 차단 - verify 응답에 verified, nextAction 필드 추가 — FE 분기 가능 - 재전송 API 신규 추가 (POST /v1/in/auth/email/verify/resend) - 재전송 60초 쿨다운, 기존 코드 자동 무효화 - email_verify TTL 1시간→5분 변경 (화면 UX "5분 유효" 일치) ## 🔗 관련 이슈 (Related Issues) Closes #205 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Domain/Common/ErrorCodes.cs` — VerifyResendCooldown(116), VerifyAttemptExceeded(117) 추가 - [x] `SPMS.Application/DTOs/Auth/EmailVerifyRequestDto.cs` — verifySessionId 필드 추가, email optional화 - [x] `SPMS.Application/DTOs/Auth/EmailVerifyResponseDto.cs` — **신규** verified, nextAction - [x] `SPMS.Application/DTOs/Auth/EmailResendRequestDto.cs` — **신규** verifySessionId - [x] `SPMS.Application/DTOs/Auth/EmailResendResponseDto.cs` — **신규** resent, cooldownSeconds, expiresInSeconds - [x] `SPMS.Application/Interfaces/IAuthService.cs` — VerifyEmailAsync 반환타입 변경, ResendVerificationAsync 추가 - [x] `SPMS.Application/Services/AuthService.cs` — VerifyEmailAsync 확장, ResendVerificationAsync 구현, TTL 5분 변경 - [x] `SPMS.API/Controllers/AuthController.cs` — verify 응답 변경, resend 엔드포인트 추가 ## 📢 리뷰어 참고 사항 (To Reviewers) - verifySessionId 우선, email 하위호환 — 기존 호출 깨지지 않음 - ITokenStore에 increment 미지원 → Get/Store 조합으로 시도 횟수 관리 - 엔티티/DB 변경 없음 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` dotnet build → 빌드했습니다. 경고 0개, 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-25 01:39:17 +00:00
- verify API: verifySessionId 기반 입력 지원 (email 하위호환)
- verify API: 시도 횟수 5회 제한 (30분 TTL)
- verify API: 응답에 verified, nextAction 필드 추가
- resend API 신규: POST /v1/in/auth/email/verify/resend
- resend API: 60초 쿨다운, 기존 코드 자동 무효화
- email_verify TTL 1시간→5분 변경 (signup/login 포함)
- ErrorCodes 추가: VerifyResendCooldown(116), VerifyAttemptExceeded(117)

Closes #205
seonkyu.kim added the
Priority
Medium
Status
In Progress
Type
Improvement
labels 2026-02-25 01:39:26 +00:00
seonkyu.kim self-assigned this 2026-02-25 01:39:28 +00:00
seonkyu.kim added this to the Phase 0: 공통 기반 + 인증 milestone 2026-02-25 01:39:30 +00:00
seonkyu.kim requested review from Owners 2026-02-25 01:39:39 +00:00
seonkyu.kim merged commit b6008fb657 into develop 2026-02-25 01:40:57 +00:00
seonkyu.kim deleted branch improvement/#205-email-verify-resend 2026-02-25 01:41:14 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-25 01:41:23 +00:00
Sign in to join this conversation.
No description provided.