Skip to content

[fix] 비밀번호 변경 기능 api 로그인 여부에 따라 분리 - #68

Merged
KiSeungMin merged 1 commit into
mainfrom
develop
Apr 10, 2026
Merged

KiSeungMin merged 1 commit into
mainfrom
develop

Conversation

@KiSeungMin

@KiSeungMin KiSeungMin commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

#️⃣ 연관된 이슈

ex) #이슈번호, #이슈번호

📝 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요 (이미지 첨부 가능)

🖼️ 스크린샷 (선택)

UI 변경 등 시각적으로 확인할 수 있는 내용이 있다면 첨부해주세요

💬 리뷰 요구사항 (선택)

리뷰어가 특히 봐주었으면 하는 부분이 있다면 작성해주세요

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 휴대폰 인증을 통한 비밀번호 리셋 기능 추가
    • 로그인한 사용자를 위한 비밀번호 변경 엔드포인트 추가
  • 개선사항

    • 비밀번호 리셋 요청에 대한 보안 정책 업데이트로 미인증 사용자도 접근 가능하도록 개선

@KiSeungMin KiSeungMin self-assigned this Apr 10, 2026
@coderabbitai

coderabbitai Bot commented Apr 10, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 04db0ff9-f6c1-4513-8d68-fe769eefeff8

📥 Commits

Reviewing files that changed from the base of the PR and between 1d8c80a and 07c35a1.

📒 Files selected for processing (9)
  • src/main/java/com/wilo/server/auth/config/SecurityConfig.java
  • src/main/java/com/wilo/server/auth/error/AuthErrorCase.java
  • src/main/java/com/wilo/server/auth/repository/PhoneVerificationCodeRepository.java
  • src/main/java/com/wilo/server/auth/service/AuthService.java
  • src/main/java/com/wilo/server/user/controller/UserController.java
  • src/main/java/com/wilo/server/user/dto/UserPasswordChangeRequestDto.java
  • src/main/java/com/wilo/server/user/dto/UserPasswordResetRequestDto.java
  • src/main/java/com/wilo/server/user/service/UserService.java
  • src/test/java/com/wilo/server/user/service/UserServiceTest.java

📝 Walkthrough

Walkthrough

비밀번호 재설정 흐름을 전화번호 인증 검증으로 강화했습니다. 인증되지 않은 사용자의 재설정 엔드포인트 접근을 허용하고, Redis에서 인증 상태를 추적하며, 기존 로그인 사용자의 비밀번호 변경과 분리했습니다.

Changes

Cohort / File(s) Summary
보안 설정
src/main/java/com/wilo/server/auth/config/SecurityConfig.java
비인증 PATCH 요청 허용 경로를 /api/v1/users/password에서 /api/v1/users/password/reset으로 변경
인증 에러 관리
src/main/java/com/wilo/server/auth/error/AuthErrorCase.java
PHONE_VERIFICATION_REQUIRED 에러 상수 추가 (상태 400, 코드 1019)
전화번호 인증 저장소
src/main/java/com/wilo/server/auth/repository/PhoneVerificationCodeRepository.java
비밀번호 재설정 인증 상태 Redis 추적을 위한 3가지 공개 메서드 추가 (savePasswordResetVerified, isPasswordResetVerified, deletePasswordResetVerified)
인증 서비스
src/main/java/com/wilo/server/auth/service/AuthService.java
confirmPhoneVerificationCode에서 전화번호 검증 후 재설정 인증 상태 저장 로직 추가
사용자 컨트롤러
src/main/java/com/wilo/server/user/controller/UserController.java
PATCH /passwordPATCH /password/reset으로 변경 및 새로운 PATCH /password/change 엔드포인트 추가 (로그인 사용자용)
DTO 변경
src/main/java/com/wilo/server/user/dto/UserPasswordResetRequestDto.java, src/main/java/com/wilo/server/user/dto/UserPasswordChangeRequestDto.java
UserPasswordUpdateRequestDtoUserPasswordResetRequestDto로 이름 변경 및 새로운 UserPasswordChangeRequestDto DTO 추가
사용자 서비스
src/main/java/com/wilo/server/user/service/UserService.java
updatePasswordresetPassword로 변경하여 전화번호 인증 검증 추가, changePassword 메서드 신규 추가 (로그인 사용자용)
사용자 서비스 테스트
src/test/java/com/wilo/server/user/service/UserServiceTest.java
resetPasswordchangePassword 메서드에 대한 성공/실패 케이스 테스트 추가

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Client
    participant AuthController
    participant AuthService
    participant PhoneVerificationCodeRepository
    participant Redis
    participant UserService
    
    User->>Client: 전화번호 입력 및 인증코드 요청
    Client->>AuthController: POST /phone-verification/codes
    AuthController->>AuthService: requestPhoneVerificationCode(phoneNumber)
    AuthService->>PhoneVerificationCodeRepository: savePhoneVerificationCode(phoneNumber, code)
    PhoneVerificationCodeRepository->>Redis: SET phone:verification:{phoneNumber} {code}
    
    User->>Client: 인증코드 입력
    Client->>AuthController: POST /phone-verification/confirm
    AuthController->>AuthService: confirmPhoneVerificationCode(phoneNumber, code)
    AuthService->>PhoneVerificationCodeRepository: deleteByPhoneNumber(phoneNumber)
    PhoneVerificationCodeRepository->>Redis: DEL phone:verification:{phoneNumber}
    AuthService->>PhoneVerificationCodeRepository: savePasswordResetVerified(phoneNumber)
    PhoneVerificationCodeRepository->>Redis: SET password:reset:verified:{phoneNumber} true (TTL: 10min)
    
    User->>Client: 새 비밀번호 입력
    Client->>UserController: PATCH /password/reset
    UserController->>UserService: resetPassword(phoneNumber, newPassword)
    UserService->>PhoneVerificationCodeRepository: isPasswordResetVerified(phoneNumber)
    PhoneVerificationCodeRepository->>Redis: EXISTS password:reset:verified:{phoneNumber}
    UserService->>PhoneVerificationCodeRepository: deletePasswordResetVerified(phoneNumber)
    PhoneVerificationCodeRepository->>Redis: DEL password:reset:verified:{phoneNumber}
    UserService->>UserService: 비밀번호 인코딩 및 저장
    UserService-->>UserController: 성공 응답
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested labels

🛠️ fix

Suggested reviewers

  • seung-in-Yoo

Poem

🔐 전화로 확인하고 Redis에 기록하면,
🔑 새로운 비밀로 안전하게 문을 열고,
🎯 로그인 사용자는 자신의 것을 바꾸고,
✨ 두 흐름이 명확히 나뉘어 서로 존중하며,
🌟 보안과 편의가 춤을 춥니다!


검토 포인트:

안녕하세요! 이 변경사항을 검토하실 때 다음 부분을 특히 살펴봐 주시면 감사하겠습니다:

  1. Redis TTL 관리: savePasswordResetVerified의 10분 TTL이 비즈니스 요구사항과 일치하는지 확인
  2. 전화번호 정규화: 인증 단계와 재설정 단계에서 일관되게 정규화되는지 검증
  3. 동시성 처리: 인증 상태 확인과 삭제 사이의 경쟁 조건(race condition) 고려
  4. 테스트 커버리지: 신규 메서드(resetPassword, changePassword)의 엣지 케이스 커버리지
  5. 에러 메시지: 사용자에게 표시되는 에러 메시지가 적절한지 검토

협력해주셔서 감사합니다! 🙏

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@KiSeungMin
KiSeungMin merged commit 2bdb657 into main Apr 10, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant