import nodemailer from "nodemailer";
import dotenv from "dotenv";
dotenv.config();
const { email_service, user, pass } = process.env;
const transporter = nodemailer.createTransport({
service: process.env.email_service,
auth: {
user: user,
pass: pass,
},
});
export const sendVerificationEmail = (email, token) => {
return new Promise((resolve, reject) => {
const verificationLink = `http://localhost:3020/email?token=${token}`;
const mailOptions = {
from: process.env.user,
to: email,
subject: "이메일 인증",
text: `아래의 인증 코드를 입력하여 이메일 인증을 완료해주세요: ${token}`,
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
reject(error);
} else {
resolve(info);
}
});
});
};
노드메일러 미들웨어를 만들어 준다!
router.post("/sign-up", async (req, res, next) => {
try {
const { email, password, Checkpass, name } = req.body;
if (password.length < 6) {
return res.status(409).json({
message: "비밀번호가 6자 이상이어야 됩니다.",
});
}
if (password !== Checkpass) {
return res.status(409).json({
message: "비밀번호 확인과 일치해야 합니다.",
});
}
const isExistUser = await prisma.users.findFirst({
where: {
email,
},
});
if (isExistUser) {
return res.status(409).json({ message: "이미 존재하는 이메일입니다." });
}
const hashedPassword = await bcrypt.hash(password, 10);
const token = Math.floor(Math.random() * 900000) + 100000;
const user = await prisma.users.create({
data: {
email,
password: hashedPassword,
Checkpass: hashedPassword,
name,
emailstatus: "nono", // 상태를 '가입대기중'으로 설정
verificationToken: token.toString(), // token을 문자열로 변환하여 저장합니다.
},
});
await sendVerificationEmail(email, token.toString()); // 난수 인증 코드를 이메일로 보냅니다.
return res.status(201).json({
message: "회원가입이 완료되었습니다. 이메일 인증 메일을 확인해주세요.",
});
} catch (err) {
console.error(err);
res.status(500).json({ message: "회원가입에 실패했습니다." });
}
});
그 이후에 유저 라우터에 가서 회원가입 router에 등록해준다