항해99 | [실전프로젝트] Redis, jsonwebtoken, nodemailer를 사용한 이메일 인증 기반 회원가입

docu·2023년 5월 15일
0

항해99

목록 보기
13/15

구현한 기능

이메일 인증 기반 회원가입 기능

구현 방법

  • 이메일 중복확인 API

  • 이메일 인증번호 발송 API
    이메일 중복확인 API를 거친 이메일에 한해,
    (1) Math.random()으로 6자리 랜덤 인증번호 생성
    (2) jsonwebtoken으로 토큰을 생성하고 만료시간을 3분으로 설정
    (3) redis에 토큰값을 set하고 expire시간을 4분으로 설정
    (4) config폴더에서 nodemailer로 transport 객체를 생성하고 user service단에서 이를 import하여 메일 content 작성 후 발송

  • 이메일 인증번호 검증 API
    (1) client에서 email과 code를 받아옴
    (2) redis에서 set해둔 이메일토큰값을 get
    (2-1) key값이 없다면 인증시간이 만료됐다는 에러메시지
    (2-2) 있다면 jwt verify를 한 후 client에서 입력된 인증번호 값과 Redis에 저장됐던 값 대조
    (2-2-1) 일치하지 않으면 일치하지 않는다는 에러메시지
    (2-2-2) 일치한다면 이메일 인증에 성공하였다는 메시지

  • 회원가입 API

배운점

  • nodemailer 라이브러리 사용법
  • 기본적인 redis 커맨드 사용법
  • 만료 기간이 있는 일회성 데이터에 redis를 사용하면 좋겠다

아쉬운점

  • jsonwebtoken만으로는 보안성이 떨어질지 않을까 의문, 토큰키를 탈취당하거나, 토큰키를 갖고있는 사람이라면 인증번호 조회가 가능하다는점 => bycrypt로 해싱하는 과정을 추가하면 더 좋을 것같다
  • 이메일이 고유값이여서 닉네임은 자유롭게 설정할 수 있게 했는데 생각해보니 중복된 닉네임으로 이상한 활동을 하는 사람이 있을 수 있다는 점을 고려하지 못한 것 같다. 유저피드백에서 이에 대해 지적해주신 분이 있어서 고민해볼 수 있었고 프론트 분께 반영해볼 수 있냐 제안했는데 아쉽게도 더이상 기능 구현하실 의사가 없으시다고 하셔서 적용하지 못했다. 그래도 왜 대부분의 커뮤니티에서 닉네임 또한 고유값이었는지 짚고 넘어갈 수 있어서 좋은 경험이었다.

완성본

완성본과... 보기만해도 기분좋았던, 힘이나는 유저피드백

참고자료

회원가입 이메일 인증번호 Nodemailer + Redis
Nodemailer로 사용자에게 메일보내기
NodeJs - 이메일 인증 (nodemailer)
[Node.js] Nodemailer로 이메일 전송하기 with Gmail
Redis Crash Course
[REDIS] 📚 Node.js 에서 redis 모듈 사용법 (캐싱 & 세션 스토어)

0개의 댓글