Skip to content

Commit 9cee43e

Browse files
committed
fix[jwt]: 비밀번호 검수를 통해 재설정을 하는 로직에 레디스에 검수 여부 저장하는 부분 수정
1 parent 04182b8 commit 9cee43e

File tree

5 files changed

+26
-6
lines changed

5 files changed

+26
-6
lines changed

backend/src/main/java/com/ai/lawyer/domain/member/controller/MemberController.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,8 @@ public ResponseEntity<VerificationResponse> verifyPassword(
307307
public ResponseEntity<PasswordResetResponse> resetPassword(
308308
@RequestBody ResetPasswordRequestDto request,
309309
Authentication authentication,
310-
HttpServletRequest httpRequest) {
310+
HttpServletRequest httpRequest,
311+
HttpServletResponse httpResponse) {
311312

312313
// 입력값 검증
313314
if (request.getNewPassword() == null || request.getNewPassword().isBlank()) {
@@ -353,7 +354,10 @@ public ResponseEntity<PasswordResetResponse> resetPassword(
353354

354355
memberService.resetPassword(loginId, request.getNewPassword(), request.getSuccess());
355356

356-
log.info("비밀번호 재설정 성공: email={}", loginId);
357+
// 비밀번호 재설정 성공 시 로그아웃 처리
358+
memberService.logout(loginId, httpResponse);
359+
360+
log.info("비밀번호 재설정 및 로그아웃 성공: email={}", loginId);
357361
return ResponseEntity.ok(PasswordResetResponse.success("비밀번호가 성공적으로 재설정되었습니다.", loginId));
358362
}
359363

backend/src/main/java/com/ai/lawyer/domain/member/service/MemberService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,14 @@ public boolean verifyPassword(String loginId, String password) {
126126
Member member = memberRepository.findByLoginId(loginId)
127127
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
128128

129-
return passwordEncoder.matches(password, member.getPassword());
129+
boolean isValid = passwordEncoder.matches(password, member.getPassword());
130+
131+
// 비밀번호 검증 성공 시 Redis에 인증 성공 표시 저장
132+
if (isValid) {
133+
emailAuthService.markPasswordVerified(loginId);
134+
}
135+
136+
return isValid;
130137
}
131138

132139
@Transactional

backend/src/main/java/com/ai/lawyer/global/email/service/EmailAuthService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ public boolean verifyAuthCode(String loginId, String inputCode) {
3838
return false;
3939
}
4040

41+
/**
42+
* 비밀번호 검증 성공 표시 (로그인 사용자용)
43+
*/
44+
public void markPasswordVerified(String loginId) {
45+
String successKey = buildSuccessKey(loginId);
46+
redisTemplate.opsForValue().set(successKey, "true", EXPIRATION_MINUTES, TimeUnit.MINUTES);
47+
}
48+
4149
/**
4250
* 이메일 인증 성공 여부 확인
4351
*/

backend/src/main/java/com/ai/lawyer/global/jwt/JwtAuthenticationFilter.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,7 @@ protected boolean shouldNotFilter(HttpServletRequest request) {
188188
String path = request.getRequestURI();
189189
return path.equals("/api/auth/signup") ||
190190
path.equals("/api/auth/login") ||
191-
path.equals("/api/auth/refresh") ||
192191
path.startsWith("/api/public/") ||
193-
path.startsWith("/api/redis-test/") ||
194-
path.startsWith("/swagger-") ||
195192
path.startsWith("/v3/api-docs") ||
196193
path.equals("/actuator/health") ||
197194
path.startsWith("/h2-console");

backend/src/test/java/com/ai/lawyer/domain/member/service/MemberServiceTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,7 @@ void verifyPassword_Success() {
652652

653653
given(memberRepository.findByLoginId(loginId)).willReturn(Optional.of(member));
654654
given(passwordEncoder.matches(password, member.getPassword())).willReturn(true);
655+
doNothing().when(emailAuthService).markPasswordVerified(loginId);
655656
log.info("Mock 설정 완료: 회원 존재, 비밀번호 일치");
656657

657658
// when
@@ -666,6 +667,8 @@ void verifyPassword_Success() {
666667
log.info("회원 존재 여부 조회 호출 확인");
667668
verify(passwordEncoder).matches(password, member.getPassword());
668669
log.info("비밀번호 일치 여부 검증 호출 확인");
670+
verify(emailAuthService).markPasswordVerified(loginId);
671+
log.info("Redis에 비밀번호 검증 성공 표시 저장 호출 확인");
669672
log.info("=== 비밀번호 검증 성공 테스트 완료 ===");
670673
}
671674

@@ -685,6 +688,7 @@ void verifyPassword_Fail_PasswordMismatch() {
685688
assertThat(result).as("비밀번호 불일치로 검증 실패").isFalse();
686689
verify(memberRepository).findByLoginId(loginId);
687690
verify(passwordEncoder).matches(password, member.getPassword());
691+
verify(emailAuthService, never()).markPasswordVerified(anyString());
688692
}
689693

690694
@Test

0 commit comments

Comments
 (0)