Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat-44] : 인증 메일 전송 및 검증 기능 구현 #45

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from

Conversation

KSLEE19
Copy link

@KSLEE19 KSLEE19 commented Nov 3, 2024

#️⃣ 요약 설명

📝 작업 내용

코드의 흐름이나 중요한 부분을 작성해주세요.

public String makeVerificationCode() { //인증 코드 생성
        Random random = new Random();
        return String.format("%06d", random.nextInt(999999));
    }

    public MailSend sendVerificationEmail(String email, String code) {
        try {
            EmailVerification verification = new EmailVerification(email, code);

            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

            messageHelper.setTo(email);
            messageHelper.setSubject(SUBJECT);
            String htmlContent = getVerificationMessage(code);
            messageHelper.setText(htmlContent, true);

            if (emailVerificationRepository.existsById(getRedisKey(email))) { //redis에 email이 있으면 삭제
                emailVerificationRepository.deleteById(getRedisKey(email));
            }
            emailVerificationRepository.save(verification); //Redis에 인증 코드 저장
            mailSender.send(message);

        } catch (MessagingException e) {
            e.printStackTrace();
            return emailConverter.toMailSendResponse("메일 전송에 실패했습니다.", false);
        }
        return emailConverter.toMailSendResponse("메일 전송에 성공했습니다.", true);
    }

ex) 기존 memberInfoDTO response 값에 생일을 추가했습니다.

public MailVerify verifyCode(String email, String code) { //메일 검증
        Optional<EmailVerification> verificationObject = emailVerificationRepository.findById(email); // redis에서 객체 가져오기
        boolean check = false;
        if (verificationObject.isPresent()) { //객체 존재하는지
            EmailVerification verification = verificationObject.get();
            if (verification.getVerificationCode().equals(code)) { // value를 확인해 입력 인증번호가 같은지 확인
                emailVerificationRepository.deleteById(email);
                check = true;
            }
        }
        return emailConverter.toMailVerifyResponse(check, email);
    }

코드에 대한 간단한 설명 부탁드립니다.
6자리 랜덤 코드 생성 후 메일 전송
(key -> Email:이메일 : value -> 6자리 코드) 형태로 redis에 10분간 저장

동작 확인

기능을 실행했을 때 정상 동작하는지 여부를 확인하고 사진을 올려주세요

mailverify

메일 검증은 인증번호가 맞으면 true, 맞지 않거나 만료된 것이면 false 반환

ex) 테스트 코드 작성후 성공 사진
redis에 �정상적으로 저장 및 10분 후 삭제되는 것 확인 완료
인증번호가 같은때와 다를 때 정상적인 결과가 반환되는 것 확인 완료
ex) swagger 사진

💬 리뷰 요구사항(선택)

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

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

@KSLEE19 KSLEE19 added the enhancement New feature or request label Nov 3, 2024
@KSLEE19 KSLEE19 self-assigned this Nov 3, 2024
@KSLEE19 KSLEE19 linked an issue Nov 3, 2024 that may be closed by this pull request
@KSLEE19 KSLEE19 changed the title [Feat-44] : 인증 메일 전송 기능 구현 [Feat-44] : 인증 메일 전송 및 검증 기능 구현 Nov 3, 2024
@genius00hwan
Copy link
Contributor

메일 인증은 무리 없어 보이는데 redis config 확인 하시고 로그인이랑 같이 머지 하시면 좋을거 같아요

Copy link
Contributor

@genius00hwan genius00hwan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 큰문제 없어 보입니다

public ApiResponse<MailSend> mailSend(@RequestBody MailRequestDTO.MailSend request) {
String code = emailService.makeVerificationCode();
String email = request.getEmail();
MailSend mailSend = emailService.sendVerificationEmail(email, code);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메일인증코드 만들어서 바로 서비스에서 보낼수 있지 않을까여 비즈니스로직은 service에서 동작하는게 좋을거 같아요

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

service단에서 로직을 전부 처리하도록 수정했습니다.


public String getVerificationMessage(String verificationCode) {
StringBuffer verificationMessage = new StringBuffer();
verificationMessage
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나중에 근로생중 누군가 메일 폼 만들어 줄겁니다. 나중되면 그걸로 수정합시다

public MailSend integratedProcee(String email) {
String code = makeVerificationCode();
return sendVerificationEmail(email, code);
}
Copy link
Author

@KSLEE19 KSLEE19 Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

service단에서 모두 처리할 수 있도록 새로 추가한 '메일 전송 과정을 통합해서 실행'하는 메소드 입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] 인증메일 전송 기능 구현
2 participants