728x90
반응형
1. 에러 발생시
2. 에러가 null인 경우 -> 해당하는 model에서 numberOfUser와 nickname을 가져온다.
th:if="${error}"
th:if="${error == null}"
th:text="${numberOfUser}"
th:text="${nickname}"
3. 해당 이메일에 대한 토큰값과 해당 이메일 정상 여부 확인하기 위해서는 @Transactional 어노테이션 적용필수
-> DB와의 싱크 위해
@Transactional
public void processNewAccount(SignUpForm signUpForm) {
// 1. 회원정보 저장
// 2. 이메일 토큰 만들기
// 3. 이메일 전송
Account newAccount = saveNewAccount(signUpForm);
// 회원가입 이메일 발송 -> starter-mail 이용 -> mailsender // 일단 가짜 객체에 저장해 콘솔에 출력
// 계정인증을 위한 토큰값 생성 -> 유효 아이디를 이용해 랜덤 생성
newAccount.generateEmailCheckToken();
//emailCehckToken=null
//저장 후 토큰 생성 -> 함수안에서만 트랜잭션이 존재하므로, DB에 싱크오류 ->@Transactional 필요
//상태 종료시 DB에 싱크를 해주기 위함
sendSignUpConfirmEmail(newAccount);
// TODO 회원 가입 처리 valid에 안걸리면 회원가입
}
4. erro일 경우와 error가 아닐경우 분기
-> token값 동일여부, 이메일 정상여부 : 거짓
-> 그 외는 참
@GetMapping("/check-email-token")
public String checkEmailToken(String token, String email, Model model) {
Account account = accountRepository.findByEmail(email);
String view = "account/checked-email";
//같은 링크를 리턴하지만, 담은 정보는 각각 다르다.
//해당 뷰에서 error를 담아서 왔을 경우와 setEmailVerified가 true를 담아서 왔을 때를 구분해서 처리
//리파지토리를 도메인 계층으로 생각해, 레이어계층에서의 리파지토리 참조를 자유롭게 한다.
//반대로, 레이어 계층인, 서비스나 컨트롤러를 도메인 계층에서 참조하는 것은 지양한다.
//1단계에서 이메일의 존재여부를 판단
//2단계에서는 해당하는 이메일의 토큰값 동일 여부를 확인한다.
if(account==null) {
//해당 이메일이 존재하지 않을 때 오류 발생
//정보제공을 줄이기 위해 -> 서버단에서만 wrong.email이라는 것을 명시하고, 리턴은 하지않는다.
model.addAttribute("error", "wrong.email");
return view;
}
//토큰이 같지 않다면
if(!account.getEmailCheckToken().equals(token)){
model.addAttribute("error", "wrong.token");
return view;
}
//해당 이메일 검증을 참으로 설정하고, 가입 정보(시간정보)와 몇번째 회원인지 리턴한다.
account.setEmailVerified(true);
account.setJoinedAt(LocalDateTime.now());
model.addAttribute("numberOfUser", accountRepository.count());
model.addAttribute("nickname", account.getNickname());
return view;
}
728x90
반응형
'Server Programming > Spring Boot Full-Stack Programming' 카테고리의 다른 글
[스프링 풀스택 클론 코딩 - 회원가입] (1-11) 회원 가입 완료 후 자동 로그인 (0) | 2022.08.27 |
---|---|
[스프링 풀스택 클론 코딩 - 회원가입] (1-10) 회원 가입 인증 메일 확인 테스트 및 리팩토링 (0) | 2022.08.26 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-9) 회원가입 이메일 인증 확인 (0) | 2022.08.26 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-8) 회원가입 패스워드 인코딩 (0) | 2022.08.26 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-7) 회원가입 리팩토링 및 테스트 (0) | 2022.08.26 |