TIL - 23.03.03

0

TIL

목록 보기
72/126

어제 2번 고민의 방법으로
emailCode라는 table에 column으로는
email(인증 시도한 유저의 이메일), code(유저가 지급받은 인증코드), emailAuthentication(인증 완료인지 enum상태) 이렇게 3가지 column을 만들었고

유저가 입력한 이메일로 인증코드를 요청했을 때
request로 받아온 email과 생성된 code가 유저에게 이메일로 보내지는 동시에 함께 저장되고 emailAuthentication은 UNVERIFIED로 저장이 된다.
여기에 유저가 이메일 인증코드를 확인해서 인증이 완료된다면 해당 UNVERIFIED enum은 VERIFIED로 변경된다.

이 상태에서 만약 유저가 인증메일을 요청하지 않아서 emailCodeRepository에 해당하는 이메일의 데이터가 존재하지 않는다면 회원가입 메소드에서 예외처리,
회원가입 요청한 유저가 UNVERIFIED 상태일 때에도 예외처리를 해서 회원가입이 불가능하도록 만들었다.



테스트를 해보던 중 인증코드를 요청을 한 유저가 다시 이메일 요청을 하더라도 같은 인증코드만 반복해서 발급되는 현상이 발견되었다.

알고보니 내가 처음 코드를 작성했을 때 ePw 객체 이름으로 생성되는 인증 코드가 static 전역변수 형태라서 계속해서 같은 인증코드를 전송하던 것이었고...

이메일을 보내고 인증코드를 저장하는 sendEmail 메소드에서

String ePw = createKey()
MimeMessage message = createMessage(userEmail, ePw)

createKey()로 생성된 객체를 만들어서 메세지를 만들어주는 메소드인 createMessage()로 함께 보내
요청이 들어올 때마다 새로운 코드가 생성되고 그 코드를 유저에게 보내는 동시에 DB에 저장되도록 수정하였다.

정말 당연한 문제인데 놓쳐버리고나니 어디가 문제인지 찾기 어려운 실수였다..

0개의 댓글