4주 프로젝트 - dev log #10

Joshua Song / 송성현·2020년 2월 12일
0

이머시브_16

목록 보기
28/29

오늘은 JWT 모바일 인증에 더불어 사용할 수 있는 이메일 인증을 도입했다.

const signupCode = Math.random().toString(36).slice(2);

    const transporter = nodemailer.createTransport(smtpTransport({
        service: "gmail",
        host: "smtp.gmail.com",
        auth: {
            user: process.env.DEVMAIL,
            pass: process.env.DEVMAILPW,
        },
    }));

    const mailOptions = {
        from: "\"DediCats\" <dediCats16@gmail.com>",
        to: email,
        subject: "Email Verification for Dedicats",
        html: `
        <div style="text-align : center">
        <img style="display : inline" src="https://lh3.google.com/u/0/d/1TqLpc4xvwkUTeLrRASDc2Y0c4nme8t3g=w1870-h975-iv1"/>
        </div>
        <p>Annyung Haseyo! ${nickname}!</p>
        <p>Thanks for joining Dedicats! We really appreciate it. Please insert this code into email verfication to verify your account</p>
        <h1>Your code is  <br><span style="text-decoration:underline">${signupCode}<span></h1>
        <h2>This code will only be valid for 1hour.</h2>
        <p>if you have any problems, please contack us : dediCats16@gmail.com</p>`,
    };

    transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
            console.log("Failed to send email");
            res.status(409).send("Failed to send email");
        } else {
            console.log(`Email sent: ${info.response}`);
            res.cookie("signupCode", signupCode, { maxAge: 1000 * 60 * 10, signed: true });
            res.status(201).send("Successfully sent email");
        }
    });

먼저 이 기능을 구현하기 위해 nodemailer와 nodemailer-smtp-transport라는 모듈을 사용했다. 간단하게 nodemailer를 사용해 알려준데로 하면 원래 있는 계정을 사용해 원하는 곳으로 이메일을 보낼 수 있다. 우리의 경우에서는 리퀘스트에서 보내는 이메일 주소로 보내는 것인데 mailOptions을 사용해 세부사항을 결정할 수 있다.

from 에는 이메일을 보낼 때 어떤 이름으로 보낼지 정할 수 있고 to 는 보내는 타겟이다. subject는 이메일 주제이고 html은 그 안의 내용을 꾸며줄 때 사용한다. 우리는 이메일을 보내고 쿠키를 보내줘 클라이언트에서 쿠키를 열었을 때 그 코드가 이메일안의 코드와 일치하면 이메일 인증을 통과시킨다. 효과적일 것 같다.

나누어주고 새로 만들어준 함수를 폴더에 넣어주고 파일을 정리해주었다.
이제 클라이언트로 넘어가면 된다.

profile
Grow Joshua, Grow!

0개의 댓글