nodemailer를 활용해보자
먼저 구글에서 앱키를 받아야한다.
앱키를 받았으면 gmail -> 톱니바퀴 -> 모든 설정보기 에서
"IMAP 사용"을 체크해준다.
"IMAP 사용 안함" 을 선택하면 smtp 서버에서 오류를 내뿜는다
그리고나서 nodemailer에서 지원하는 것들에 대한 필수 값을 적어주고
회원가입시 적었던 email로 메일을 보내줘 인증절차를 걸칠 수 있다.
기본 설정은 auth.js에 적어두었다 이제 이 부분을 users.controller.js에 가져다 쓰면 된다.
이렇게 user.controller.js에 import해주고
users.controller.js에 함수를 만들어줘 users.routes.js로 내보내주면 된다.
그럼 이렇게 이메일이 온다.
이메일이 온다,, 이메일은 온다,, 그럼 여기서 해야할 점
나는 인증 코드를 비교하기 위해
"code"라는 컬럼을 shema.prisma에 설정해줬다.
근데 생각해보니 고작 인증하나하려고 디비에 컬럼까지 추가해줘가며
저장해둘 필요가 있나? 라는 생각이 들었다.
어차피 한번 쓰고 다시 쓰이지 않을 것이기도하고
그래서 엑세스 토큰으로 가져와서 값을 헤더에 포함시켜 보낼까?
라고 생각해서 팀장님께 물어봤다. 레디스를 추가해서 사용하면 가장
효율성이 좋을거라고 조언을 해줘서 참고하여 작성했다.
redis 설정은 redis.js에서 기본값을 세팅해두셔서 이걸 끌어와 쓰면 된다.
인증 코드와 같이 일시적으로 사용되는 함수가 있는데
setex 라는 redis 명령어다
이 명령어를 sendMail 안에 넣어주어 활용해줬다.
setex는 기본적으로 Key, value 값을 설정하면서 TTL까지 주어 데이터 유효 시간까지 한번에 처리해주는
유용한 명령어라고 알게 되었다. (미리 알았다면 좋았을 것,,)
그럼 위에 구성된 순서대로 정리를 해보자면
email은 Key값, verificationCode는 밸류값이라고 보면된다.
중간에 들어간 300 은 5분이라는 유효시간을 넣어준 것. 즉 TTL을 설정해준 것이다.
이렇게 세팅을 해주고 users.controller.js 에서
redisClient.get 를 활용해 Redis에서 해당하는 값을 가져오게 불러주면 끝.
예외처리 확인차 일부러 잘못된 값을 입력해줬는데. insomnia에서는
오류를 뱉지 않고 터미널에서 에러로그를 뱉는걸 목격할 수 있다.
이런 에러는 이미 많이 당해봐서 안다
바로 콜백 함수 처리가 제대로 안되고 있다는건데,
이 부분은 예전에 튜터님한테 Promise를 활용해 바꿔주면 된다는
피드백을 조언 삼아 고쳐보자!
Promise를 활용해 처리를 해주었더니 정상적으로 작동하는걸 확인할 수 있다.
오류를 고치는데 활용한 코드이다.
new Promise를 생성해서 resolve와 reject를 인자값으로 받는다.
간단하게 resolve는 성공 reject는 실패시 반환하는건데
이렇게 설정해주고 밑에 if문으로 인증코드가 일치하는지 안하는지를 비교해주면
응답값을 기다리지 않고 콜백해주기 때문에 작동되는거라 볼 수 있다.
[TIL] 2024.03.04 타입스크립트 (2) | 2024.03.05 |
---|---|
[TIL] 2024-02-29 coco-sitter 회고 (0) | 2024.03.01 |
[TIL] 2024.02.23 백오피스 프로젝트 시작 (1) | 2024.02.26 |
[TIL] 2024.02.23 테스트 코드 멸망 (0) | 2024.02.23 |
[TIL] 2024.02.21 노드 심화 1차 회고 (0) | 2024.02.22 |