728x90
배경
이메일 회원가입 시 해당 이메일을 가지고 있는지 파악하기 위해 이메일 인증번호를 보내는 API를 개발해야 했다.
요구사항
1. Node.js 서버에서 Query paramter로 이메일 정보를 받는다.
2. 해당 이메일로 3자리 인증번호를 보낸다.
3. response로 동일한 3자리 인증번호를 응답에 성공하면 code:200과 함께 data에 인증번호를 담아 보낸다..
curl http://localhost:3000/register/authcode?email=wks0968@gmail.com
{
"code": 200,
"msg": "",
"data": 263
}
해결
1. https://myaccount.google.com/security 에 접속해서 2단계 인증을 설정하고 앱 비밀번호를 생성한다.
2. Google gmail 아이디와, 생성한 앱 비밀번호를 nodemailer.createTransport의 auth 부분에 입력한다.
// 5. 이메일 인증번호
route.get('/register/authcode', async (req: Request, res: Response) => {
try {
const email: string = req.query.email as string;
const authCode: number = await userService.authCode(email);
res.status(200).json({
code: 200,
msg: '',
data: authCode,
});
} catch (e) {
sendError(e, res);
}
});
public async authCode(email: string): Promise<number> {
const code: number = Math.floor(Math.random() * (999 - 100 + 1) + 100);
const transporter = nodemailer.createTransport({
service: 'gmail',
host: 'smtp.gmail.com',
port: 587,
secure: false,
auth: {
user: process.env.NODEMAILER_USER,
pass: process.env.NODEMAILER_PASS,
},
});
const info = await transporter.sendMail({
// 보내는 곳의 이름과, 메일 주소를 입력
from: `"PAPS 팀" <${process.env.NODEMAILER_USER}>`,
to: email,
subject: 'PAPS 회원가입 - 이메일 인증번호를 입력해주세요.',
html: `인증번호 세 자리를 입력해주세요!<br>
<p style="font-weight: bold; font-size: 20px">
${code}
</p>
`,
});
return code;
}
3. sendMail에 생성한 인증번호와 보낼 이메일 내용을 입력한다. 인증번호는 다음과 같은 방식으로 100~999 범위 내에서 랜덤하게 생성이 가능하다.
const code: number = Math.floor(Math.random() * (999 - 100 + 1) + 100);
4. API 요청 시, 메일이 정상적으로 보내지는 것을 확인할 수 있다.
주의사항
1. 이메일과 앱 비밀번호는 프로젝트에 적는 것이 아니라 보안을 위해 .env에 입력해서 관리하는 것이 좋다.
'개발 > Node.js' 카테고리의 다른 글
SQL :: 점수 합계, 등급 산정하기, PERCENTRANK, SUM (8) | 2023.01.26 |
---|---|
Node.js + bcrypt :: 회원가입 시 비밀번호 암호화하기 & 로그인 시 비밀번호 검증, 비교하기 (0) | 2022.11.09 |
Prisma + PostgreSQL :: 차세대 Node.js, TypeScript ORM 기술 (0) | 2022.11.06 |