반응형
이메일 확인 페이지 작성
이메일 재전송 가능하면 재전송
-> 1시간 이내 재전송한 경우 재전송하지 않는다.
check-email
<!DOCTYPE html>
<html>
<head th:replace="fragments.html :: head"></head>
<meta charset="UTF-8">
<title>인증 이메일 확인</title>
</head>
<body>
<nav th:replace="fragments.html :: main-nav"></nav>
<div class="container">
<!-- 에러메시지 있을 때 블럭-->
<div class="py-5 text-center" th:if="${error !=null}">
<p class="lead"> 데모 가입</p>
<div class="alert alert-danger" role="alert" th:text="${error}"></div>
<p class="lead" th:text="${email}"> your@email.com</p>
</div>
<!-- 에러메시지 없을 때 블럭-->
<div class="py-5 text-center" th:if="${error==null}">
<p class="lead">데모 가입</p>
<h2> 데모 서비스를 이용하려면 인증 이메일을 확인하세요. </h2>
<div>
<p class="lead" th:text="${email}"> your@email.com</p>
<a class="btn btn-outline-info" th:href="@{/resend-confirm-email}"> 인증 이메일 다시 보내기</a>
</div>
</div>
<div th:replace="fragments.html :: footer"></div>
</div>
</body>
</html>
AccountController -> checkEmail(), resendConfirmEmail()
//이메일 확인 페이지, 이메일 재전송
@GetMapping("/check-email")
public String checkEmail (@CurrentUser Account account, Model model) {
model.addAttribute("email", account.getEmail());
//모델의 email에 account의 이메일을 담는다.
return "account/check-email";
}
@GetMapping("/resend-confirm-email")
public String resendConfrimEmail(@CurrentUser Account account, Model model) {
//이메일 전송 가능 여부 확인 -> 재전송한 시간이 1시간이내인 경우 불가능
//재전송한 시간이 1시간이내인 경우
if(!account.canSendConfirmEmail()) {
model.addAttribute("error", "인증 이메일은 1시간에 한번만 전송할 수 있습니다.");
model.addAttribute("email", account.getEmail());
return "account/check-email";
}
//재전송한 시간이 1시간이내가 아닌 경우
accountService.sendSignUpConfirmEmail(account);
return "redirect:/";
//redirect로 보내는 이유는 새로고침시 재전송하는 것을 미연에 방지하기위해
}
}
AccountService에서 sendSignUpConfirmEmail()
//재전송 기능을 사용하기위해 private -> public으로 변경
public void sendSignUpConfirmEmail(Account newAccount) {
// 관련 객체 정의 후 -> 빈 정의 후 발송
SimpleMailMessage mailMessage = new SimpleMailMessage();
// 받는 주소
mailMessage.setTo(newAccount.getEmail());
// 제목 작성
mailMessage.setSubject("Demo, 회원 가입 인증");
// 본문 작성 -> 가입인증 링크 만들어 제공 -> 토큰값을 생성해 가입인증 진행
mailMessage.setText("/check-email-token?token=" + newAccount.getEmailCheckToken() +
"&email=" + newAccount.getEmail());
// 메일 발송 ->
javaMailSender.send(mailMessage);
// 만약에 발송을 하지않는다면, test에서 오류를 내뿜게된다.
}
반응형
'Server Programming > Spring Boot Full-Stack Programming' 카테고리의 다른 글
[스프링 풀스택 클론 코딩 - 회원가입] (1-19) 로그인 기억하기 (0) | 2022.08.30 |
---|---|
[스프링 풀스택 클론 코딩 - 회원가입] (1-18) 로그인 로그아웃 (0) | 2022.08.30 |
[스프링 풀스택 클론 코딩] 인증된 사용자와 미인증 사용자 분류 (0) | 2022.08.30 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-16) 현재 인증된 사용자 정보 참조 (0) | 2022.08.30 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-15) 첫 페이지 보완 (0) | 2022.08.30 |