- 이 코드를 (응용해서) 사용해야 하는데…
- UserService - public void signup(SignUpRequestDto requestDto에 넣자니 sign 할 때 넣어주는 Request를 모두 다 같이 넣어주어야 함
- sign의 정보 입력 → email 인증 코드 받기(보내기) → email 인증 코드 입력 및 검증 → sign 완료되어야 하기 때문에 signRequest와 분리 해줘야 함
- 하여 메서드를 따로 만들고 작동하게 해야함
- public class EmailVerification → private boolean isApproved = false;
- 보통 회원가입의 정보를 입력하고 이메일 인증을 하지만 우리는 백엔드만 테스트하는 입장이어서 이메일 먼저 인증하고 회원가입 순서가 된..다…!?!?!
- 포스트맨 인증 코드 이메일 전송(받기)
- 왜 @GetMapping?
@GetMapping("/email")
public ResponseEntity<MsgResponseDto> emailCheck(@RequestParam EmailVerificationRequestDto emailVerificationRequestDto) {
userService.verificationCodePass(emailVerificationRequestDto);
return ResponseEntity.ok().body(new MsgResponseDto("이메일 인증 성공", HttpStatus.OK.value()));
}
- 인증만 할 뿐, 서버 자체에서 변경되는 것이 없다
- 열심히 했던 코드! → 바뀌고 있음…
@Transactional
public boolean verificationCodeCheck(EmailVerificationRequestDto emailVerificationRequestDto) {
String userEmail = emailVerificationRequestDto.getUserEmail();
int userEnteredVerificationCode = emailVerificationRequestDto.getVerificationCode();
Optional<EmailVerification> emailVerification = emailVerificationRepository.findByUserEmail(userEmail);
if (emailVerification.isPresent()) {
EmailVerification verification = emailVerification.get();
if (verification.getVerificationCode() != userEnteredVerificationCode) {
throw new IllegalArgumentException("올바른 인증 번호가 아닙니다.");
}
if (verification.getExpirationDateTime().isBefore(LocalDateTime.now())) {
throw new IllegalArgumentException("인증 시간이 만료되었습니다.");
}
verification.approve();
} else {
throw new IllegalArgumentException("유효하지 않은 이메일입니다.");
}
return true;
- @Transactional 물어보기
- @Transactional 때문에 Optional이 작동하지 않아 false가 되는,,,,?
- 한 이메일로 인증 번호를 2번 이상 받으면 오류가 나는 상황
- 새로 인증 번호를 받으면 이전 인증 번호가 삭제되는 것 구현하기
- @RequiredArgsConstructor 으로 통일!
- @RequiredArgsConstructor가 없고 setter나 다른 어노테이션, 생성자 그대로 입력 등을 마구잡이로 쓰게 된다면 가독성이 좋지 않다!
- 오류는 없지만 추가해야 할 것이 생길 수도 있고 코드 유실의 위험이 있다!
- 로그인 url 질문이 나옴! → JwtAuthenticationFilter에 로그인 구현이 있다
public JwtAuthenticationFilter(JwtUtil jwtUtil) {
this.jwtUtil = jwtUtil;
setFilterProcessesUrl("/api/login");
}
- 내일 URL 이야기! → api를 빼거나 다 바꾸거나…?!