가입 확인 이메일 재전송
구현 로직
- 가입 확인 이메일을 재전송할 수 있는 기능 제공
- 너무 자주 전송 시 리소스 낭비할 수도 있는 문제 발생
- 1시간에 한번만 인증 메일 전송할 수 있도록 제한
Get "/check-email"
- 가입 확인 이메일을 전송한 이메일 주소를 화면에 보여줌
- 재전송 버튼 보여주기
- 재전송 버튼 클릭시 get "/resend-confirm-email"요청 전송
시큐리티 설정에서 check-email 을 제거해줬다. check-email 은 permitAll 이 아니라 로그인한 사용자만 접근 가능해야 한다.
인증 이메일 다시 보내기 버튼을 클릭할 시 다음과 같은 화면이 표출된다.
웹 서비스를 다운시키려는 목적으로 이메일을 계속 요청할 수 있다. 그럼 과부하가 생길 수 있다.
public boolean canSendConfirmEmail() {
return this.emailCheckTokenGeneratedAt.isBefore(LocalDateTime.now().minusHours(1));
}
따라서 1시간마다 가능하도록 하게 하였다.
<div class="py-5 text-center" th:if="${error != null}">
error 메시지가 있을 때 보여주는 블럭
<div class="py-5 text-center" th:if="${error == null}">
error 메시지가 없을 때 보여주는 블럭
Get "/resend-confirm-email"
- 인증 메일을 다시 전송할 수 있는지 확인
- 보낼 수 있으면 전송, 첫 페이지로 리다이렉트
- 보낼 수 없으면 에러 메시지를 모델에 담아주고 이메일 확인 페이지 다시 표출
Q. 리다이렉트를 하는 이유는?
화면 리프레쉬를 할때 마다 이메일이 재전송 되면 안된다. resend-confirm-email이 주소창에 계속 있으면 화면을 리프레쉬 할때 마다 계속 이메일을 보내게 된다. (의도치 않게) 그래서 미연에 방지하기 위해 ~! (get 요청임에도 불구하고)
SingUpForm도 마찬가지 이유 때문에 리다이렉트를 했다.
@PostMapping("/sign-up")
public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors) {
if (errors.hasErrors()) {
return "account/sign-up";
}
Account account = accountService.processNewAccount(signUpForm);
accountService.login(account);
return "redirect:/";
}
get으로 home을 보여주는 것보다 post 한 다음에 리다이렉트 하는 것, 아무리 리프레시 하더라도 ... (?!)
어떤 요청을 처리했을 때 다시 일어나지 않았으면 좋겠다고 생각하면 리다이렉트 .. 등 적절한 요청을 생각해보자.
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발
Author And Source
이 문제에 관하여(가입 확인 이메일 재전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leyuri/가입-확인-이메일-재전송저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)