비밀번호 찾기

AUTH-FIND-PW · /find-pw

실제 화면 열기 ↗
기능
4
API 호출
0
가드레일
5
id 가 테스트 이름
구현 단계
7 / 7
완료인증 · 회원wvctesol-auth :8081클라이언트 컴포넌트259

개발 스펙

이 화면에서 할 수 있어야 하는 것 (1)

  • 본인 확인 후 재설정 링크를 받는다.

비즈니스 규칙 (1)

  • 재설정 링크는 일회용이고 만료가 있어야 한다.

API (1)

메서드경로권한모듈 · 설명
POST/api/identity/members/reset-password공개
재설정 요청.
domains:identity:identity-web

가드레일 (5) — id 가 곧 테스트 이름이다

id반드시 만족해야 하는 것등급
find-pw-screen-reaches-server
비밀번호 찾기 화면의 요청이 실제로 서버까지 닿아야 한다. 화면은 /api/identity/auth/find-pw 를 부르는데 그 라우트가 없으면 Auth.js catch-all 이 400 으로 삼켜, 화면에는 그냥 실패로만 보인다.
critical
reset-link-only-by-mail
재설정 링크는 메일로만 보내야 한다. 문자로 보내면 토큰이 통신사와 로그에 남는다.
critical
notification-failure-does-not-break-flow
발송이 실패해도 요청 자체는 성공해야 한다. 메일 서버가 죽었다고 500 이 나면 안 된다.
high
reset-token-single-use
재설정 토큰은 한 번 쓰면 무효가 돼야 한다.
critical
reset-token-expires
만료된 토큰으로 비밀번호를 바꿀 수 없어야 한다.
critical

구현 계획 (7/7)

  1. AccountNotifications.sendPasswordResetLink 연결notification-app
  2. issueToken 이 토큰을 메일로 보낸다 — 응답에는 싣지 않는다identity-app
  3. updatePassword 포트identity-domain
  4. ResetPasswordUseCase + 토큰 프로바이더identity-app
  5. changePassword — dirty checking 으로 반영identity-infrastructure
  6. /api/identity/members/reset-password (+/confirm) 구현identity-web
  7. Next.js 를 BFF 로 전환 — Prisma 직접 접근 제거wvctesol

서버 사이드 구현 계획 — 자바 객체별 요구사항 (3/3)

객체모듈책임 · 지켜야 할 것
AccountNotifications
service
notification-app
계정 관련 안내 문구와 발송.
  • 문구는 원본 mail/gmail_smtp_find_id_sendmail.php 를 그대로 옮긴다. 대표전화까지 같다.
  • 재설정 링크는 EMAIL 로만 보낸다.
  • 발송 실패와 예외를 삼키고 로그로 남긴다 — 본 작업을 되돌리면 안 된다.
  • 로그에 연락처를 통째로 남기지 않는다.
PasswordResetTokenProvider
class
identity-security
재설정 토큰 발급·검증. 저장 테이블 없이 일회용과 만료를 만든다.
  • 만료는 JWT exp 로 준다.
  • 일회용은 현재 비밀번호 해시의 지문을 함께 서명해 만든다 — 비밀번호가 바뀌면 지문이 달라져 같은 토큰이 두 번 통하지 않는다.
  • 스키마를 늘리지 않으려는 선택이다. 토큰을 명시적으로 폐기해야 할 요구가 생기면 저장소를 두는 게 맞다.
  • 만료·위조·이미사용을 구분해 알리지 않는다.
ResetPasswordUseCase
service
identity-app
재설정 링크 발급과 비밀번호 변경.
  • 링크 요청도 계정 존재 여부를 알려주지 않는다.
  • 새 비밀번호는 PasswordPolicy 를 통과해야 한다.
  • @Transactional 안에서 해시를 바꾼다 — 바뀌는 순간 기존 토큰이 무효가 된다.

테스트 방법 (5)

가드레일종류확인 방법
find-pw-screen-reaches-servere2e화면에서 폼을 채워 제출하면 서버가 받은 응답(accepted)이 화면에 뜬다
reset-link-only-by-mailunitsendPasswordResetLink 가 EMAIL 채널만 쓰고 SMS 는 쓰지 않는다
notification-failure-does-not-break-flowunit발송이 예외를 던져도 호출자에게 전파되지 않는다
reset-token-single-useunit같은 재설정 토큰으로 2회 변경 시도 → 두 번째는 실패
reset-token-expiresunit만료 시각을 지난 토큰으로 변경 시도 → 실패

스냅샷

AUTH-FIND-PW 스냅샷

기능 목록 (4)

입력
  • ·2개
  • ·제출 버튼2개
  • ·입력 필드4개
상태
  • ·화면 상태pending, message, error

화면 이동

← 이 화면으로 오는 곳
이 화면에서 가는 곳 →

연결

API

직접 호출하는 API 가 없습니다

소스
src/app/find-pw/page.tsx