이메일 인증 기능은
사실 기존에 다른 팀원분께서 맡아주셔서 훌륭하게 만들어 내주셨다
nodemailer 패키지를 사용하여 실제로회원가입 진행시 메일을 발송하여 코드를 입력해야 최종 가입이 완료되는 로직인데,
이번에 따로 복습하면서 다른 팀에도 알려주면서 학습한 내용들을 기록하려한다.
1. 패키지 설치
일단 nodemailer패키지를 설치하여야 한다
npm i nodemailer
터미널에 npm을 사용하는 프로젝트라면 이러한 명령어로 다운 받을 수 있다.
yarn을 사용하는 경우 yarn add nodemailer를 입력하면 된다!
2. 임포트로 패키지 사용하기
nodemailer패키지를 다 다운 받았으면 본격적으로 사용할 수 있게 된다.
일단 이번 팀프로젝트에서 nodemailer를 사용하는 router부분은 회원가입과 이메일 인증 api가 있는 user.router.js파일이기 때문에 해당 파일 상단에 nodemailer를 import 하여 사용한다는 선언을 한다.
import nodemailer from 'nodemailer';
3. 전송자 정보 설정하기
본격적으로 코드를 작성해보자!
메일을 보낸다면 보낸사람의 정보가 있을 것이다. 그렇다면 보낸사람의 정보는 어디에 저장하여야 하는가?
또 router.js 파일에서 그 정보를 어떻게 가져와야 하는가?에 대한 내용이다.
//이메일 전송 transporter 메일을 전송하는 이메일의 값이 담겨있다.
const transporter = nodemailer.createTransport({
service: process.env.EMAIL_SERVICE, // 이메일 서비스 제공자 (예: gmail, naver)
auth: {
user: process.env.NODEMAILER_USER, // 발신자 이메일 주소
pass: process.env.NODEMAILER_PASS, // 발신자 이메일 비밀번호 또는 앱 비밀번호
},
});
transporter 즉 전송자를 선언하고 해당 전송자에게 nodemailer 패키지를 사용하여 전송자 정보를 create한다.
해당 전송자 정보에는 사용하는 서비스 제공자의 정보와, 전송자 이메일 주소, 전송자 이메일의 비밀번호가 필요하다
해당 정보들은 .env 파일에 저장하여 사용한다.
.env 파일 안에서 정보들을 이러한 방식으로 저장된다
EMAIL_SERVICE = 'gmail'
NODEMAILER_USER = 'qwer1234@gmail.com'
NODEMAILER_PASS = 'qwer1234'
저장되있는 이 정보들을 가져와 router.js 파일에서 사용하게 되는 것이다.
4. 테이블 모델 수정
기존에 사용하던 users 테이블 모델은 이런식으로 작성이 되어있었지만 이메일 인증을 받기 위해서 팀원분이 생각한 방법은
이런식으로 emailverify 값을 기본 false 값으로 설정하여 회원가입을 진행하면 기본으로 false 값이 되지만 이메일 인증까지 추가로 진행하게 되면 true 값으로 바뀌면서 로그인이 하도록 구상하였다.
5. 그럼 발송된 이메일의 구성은 어떻게 되는가?
발송자의 정보를 만들어 발송하는 건 ok, 그렇다면 수신자에게 해당 메일은 어떤식으로 보여지게 될까?
이 부분도 직접 만들 수 있다.
//메일 형태 설정
const mailOptions = {
from: process.env.NODEMAILER_USER,
//가입 이메일
to: email,
subject: '이메일 인증을 완료해주세요',
html: `인증 코드는 ${verificationCode} 입니다.`,
};
이런 식으로 메일의 구성을 설정할 수 있다. from은 발신자의 정보로 .env 파일에서 가져오게 된다.
to 부분은 수신자의 이메일 정보가 담겨있다.
subject는 메일의 제목을 담당하며 html은 메일의 내용을 담당하게 된다.
실제로 해당 메일로 발송된 사진을 가져오면
이런식의 메일이 발송되게 된다!!!
정말 놀라운 기능이 아닐수 없다.
이제 여기서 해당 코드를 유저 테이블에 있는 코드와 비교하여 이메일 인증 api를 거치면
emailverify 가 true 값으로 바뀌고
true 값을 가지고 있는 유저라면 로그인이 가능하게 되는 것이다!
웹서버 개발 왕초보의 입장에서 이러한 기능 하나하나가 매우 신기하면서 놀라운데 만약 이 게시글을 보는 초보 개발자꿈나무 분이 계시다면 이 nodemailer기능을 꼭 사용해보시길 바랍니다 !!
'내일배움캠프 TIL' 카테고리의 다른 글
프로젝트 트러블슈팅 본캠프 TIL 01/03 (0) | 2025.01.03 |
---|---|
팀 발표와 kpt 회고록 본캠프 TIL 01/02 (1) | 2025.01.02 |
뉴스 피드 과제 프론트 기초 다지기 본캠프 TIL 12/27 (0) | 2024.12.27 |
뉴스 피드 과제 중간 트러블 슈팅 본캠프 12/26 (0) | 2024.12.26 |
뉴스 피드 프로젝트 진행과정 본캠프 12/24 (0) | 2024.12.24 |