From 1b289818b99364c2230d44fa232a3f1ec12cf826 Mon Sep 17 00:00:00 2001 From: jeondui Date: Mon, 22 Apr 2024 12:10:34 +0900 Subject: [PATCH] =?UTF-8?q?Refactor:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/email/service/EmailService.java | 18 +++++++++++++++--- .../member/controller/MemberController.java | 11 ++++++----- .../domain/member/service/MemberService.java | 3 +-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/api/readinglog/domain/email/service/EmailService.java b/src/main/java/com/api/readinglog/domain/email/service/EmailService.java index 4e61e83..6f3cc5d 100644 --- a/src/main/java/com/api/readinglog/domain/email/service/EmailService.java +++ b/src/main/java/com/api/readinglog/domain/email/service/EmailService.java @@ -2,8 +2,10 @@ import com.api.readinglog.common.exception.ErrorCode; import com.api.readinglog.common.exception.custom.EmailException; +import com.api.readinglog.common.exception.custom.MemberException; import com.api.readinglog.common.redis.service.RedisService; import com.api.readinglog.domain.member.entity.Member; +import com.api.readinglog.domain.member.entity.MemberRole; import com.api.readinglog.domain.member.service.MemberService; import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; @@ -43,11 +45,11 @@ public void sendAuthCode(String toEmail) { } @Async - public void sendTemporaryPassword(Long memberId, String toEmail) { + public void sendTemporaryPassword(String toEmail) { String tempPassword = createRandomCode(); sendEmail(toEmail, tempPassword, "[리딩 로그] 임시 비밀번호", "tempPassword.html"); - Member member = memberService.getMemberById(memberId); + Member member = memberService.getMemberByEmailAndRole(toEmail, MemberRole.MEMBER_NORMAL); member.updatePassword(passwordEncoder.encode(tempPassword)); } @@ -67,12 +69,18 @@ public void sendEmail(String toEmail, String code, String subject, String templa } } - public void verifyAuthCode(String email, String authCode) { + public void validateAuthCode(String email, String authCode) { findByEmailAndAuthCode(authCode) .filter(e -> e.equals(email)) .orElseThrow(() -> new EmailException(ErrorCode.INVALID_AUTH_CODE)); } + public void validateMember(String email) { + if (!isMemberExists(email)) { + throw new EmailException(ErrorCode.NOT_FOUND_MEMBER); + } + } + // 인증번호 및 임시 비밀번호 생성 private String createRandomCode() { Random random = new Random(); @@ -108,5 +116,9 @@ private Optional findByEmailAndAuthCode(String authCode) { Object email = redisService.getData(authCode); return Optional.ofNullable(email != null ? email.toString() : null); } + + private boolean isMemberExists(String email) { + return (memberService.getMemberByEmailAndRole(email, MemberRole.MEMBER_NORMAL)) != null; + } } diff --git a/src/main/java/com/api/readinglog/domain/member/controller/MemberController.java b/src/main/java/com/api/readinglog/domain/member/controller/MemberController.java index 7a70b3e..8d911d7 100644 --- a/src/main/java/com/api/readinglog/domain/member/controller/MemberController.java +++ b/src/main/java/com/api/readinglog/domain/member/controller/MemberController.java @@ -198,13 +198,15 @@ public Response updatePassword(@AuthenticationPrincipal CustomUserDetail u return Response.success(HttpStatus.OK, "비밀번호 변경 성공"); } - @Operation(summary = "이메일 인증 코드 전송", description = "사용자 이메일로 인증 코드를 전송합니다.") + @Operation(summary = "이메일 인증 코드 전송", description = "사용자 이메일로 인증 코드를 전송합니다. 회원 존재 유무도 함께 검사합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "이메일 인증 코드 전송 완료", content = {@Content(schema = @Schema(implementation = Response.class))}) }) @PostMapping("/send-authCode") public Response sendEmailAuthCode(@RequestBody @Valid EmailRequest request) { + // 회원 인증 후 인증 코드 전송 + emailService.validateMember(request.getEmail()); emailService.sendAuthCode(request.getEmail()); return Response.success(HttpStatus.OK, "이메일 인증 코드 전송 완료"); } @@ -217,7 +219,7 @@ public Response sendEmailAuthCode(@RequestBody @Valid EmailRequest request }) @PostMapping("/verify-authCode") public Response verifyAuthCode(@RequestBody @Valid AuthCodeVerificationRequest request) { - emailService.verifyAuthCode(request.getEmail(), request.getAuthCode()); + emailService.validateAuthCode(request.getEmail(), request.getAuthCode()); return Response.success(HttpStatus.OK, "이메일 인증 성공"); } @@ -227,9 +229,8 @@ public Response verifyAuthCode(@RequestBody @Valid AuthCodeVerificationReq content = {@Content(schema = @Schema(implementation = Response.class))}) }) @PostMapping("/send-temporaryPassword") - public Response sendEmailTempPassword(@AuthenticationPrincipal CustomUserDetail user, - @RequestBody @Valid EmailRequest request) { - emailService.sendTemporaryPassword(user.getId(), request.getEmail()); + public Response sendEmailTempPassword(@RequestBody @Valid EmailRequest request) { + emailService.sendTemporaryPassword(request.getEmail()); return Response.success(HttpStatus.OK, "임시 비밀번호 전송 완료"); } diff --git a/src/main/java/com/api/readinglog/domain/member/service/MemberService.java b/src/main/java/com/api/readinglog/domain/member/service/MemberService.java index 0e80293..7526fce 100644 --- a/src/main/java/com/api/readinglog/domain/member/service/MemberService.java +++ b/src/main/java/com/api/readinglog/domain/member/service/MemberService.java @@ -27,7 +27,6 @@ import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -71,7 +70,7 @@ public JwtToken login(LoginRequest request) { public Member getMemberByEmailAndRole(String email, MemberRole role) { return memberRepository.findByEmailAndRole(email, role) - .orElseThrow(() -> new UsernameNotFoundException(ErrorCode.NOT_FOUND_MEMBER.getMessage())); + .orElseThrow(() -> new MemberException(ErrorCode.NOT_FOUND_MEMBER)); } public Member getMemberById(Long memberId) {