2024.02.26 TIL - 노드메일러

김민석·2024년 2월 26일
0

TIL

목록 보기
41/78

노드메일러

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에 등록해준다

profile
화이팅 화이팅

0개의 댓글