[개발 일지] 게시판(이메일 인증)

홍범선·2023년 8월 26일
1

MyStory 개발일지

목록 보기
3/27

이메일 인증

사용배경

이전에 Gmail API를 통해 메일 발송하는 것까지 구현하였다. 그러면 메일에서 어떻게 사용자 인증을 할 수 있을까?라는 생각을 가지게 되었다.
아이디어는 악보공장이라는 사이트에서 힌트를 얻었다.

패스워드 변경하기 url을 확인해봤는데 userID와 code가 get방식으로 호출하는 것을 볼 수 있다. 이것을 프로젝트에 적용해보았다.

로직을 다이어그램으로 나타내 보았다.

코드로 알아보자

코드

1. 해시값 생성 후 insertEmailCode함수 호출


randomBytes변수에는 'hex'로 이루어진 20자리 해시값이 저장된다. 그리고 mailOptions을 보게 되면 해시값과 userID가 url에 포함되는 것을 볼 수 있다.

2. insertEmailCode함수


DB에 생성한 토큰(해시값)과 현재시간 + 1(유효시간 1분)이 DB안에 저장된다. 이 말은 즉슨 1분 안에 링크를 클릭하여 비밀번호를 변경해야 한다는 의미이다.

3. URL을 클릭했을 때 유효한지 확인하는 함수

클라이언트


GET방식으로 전달받은 param을 가지고 checkToken API를 호출한다.

서버


userID와 userEmailCode가 같은 것이 있는지 확인하고 더 나아가 userEmailTime이 1분 이전인 것을 확인한다. 즉 rows.length === 0(select된 것이 없음)면 유효하지 않은 것이고 rows.legnth === 1(select된 것이 있음) 유효한 것이다.

결과

https://youtu.be/jYEZiKQ3ulc

profile
알고리즘 정리 블로그입니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 26일

좋은 글 감사합니다 :)

답글 달기