Nodemailer 에서 Gmail을 사용하기 위해서는 앱 비밀번호 설정이 필요하다.
구글 계정설정 → 보안 → 앱 비밀번호 추가
* 생성된 앱 비밀번호는 다시 확인할 수 없으므로 기록이 필수다.
구글 계정 메뉴에서 자물쇠 모양 보안을 들어간다.
이 곳에서 2단계 인증을 하면 앱 비밀번호를 추가할 수 있다.
- nodemailer 코드
const nodemailer = require('nodemailer')
const transport = nodemailer
createTransport({
service: 'Gmail',
auth: {
user: "google account", # 본인 구글 계정
pass: "app password", # 본인 앱 비밀번호
},
})
...
const message = {
from: "login account",
to: "mail address",
subject: "title",
text: "message",
}
transport.sendMail(message, (err, info) => {
if(err) {
console.error('err', err)
return
}
console.log('ok', info)
})
- 랜덤 비밀번호를 만들어서 비밀번호를 메일로 발송하기
# 임의의 문자열을 만들어주는 함수
function generateRandomPassword() {
return Math.floor(
Math.random() * (10** 8)
).toString().padStart('0', 8)
}
---
router.post('/reset-password', asyncHandler(... => {
const { email } = req.body
const randomPassword = generateRandomPassword()
await User.findOneAndUpdate({ email }, {
password: getHash(password),
})
await sendEmail(email, '...', password)
res.redirect('/')
}))
email을 받아서 생성된 임의의 문자열로 사용자의 비밀번호를 초기화한 후,
초기화한 비밀번호를 메일로 발송하는 코드이다.
- 초기화 후 로그인 시 비밀번호 변경 요청
비밀번호 변경
const UserSchema = ...
passwordReset: {
type: Boolean,
default: false,
}
...
---
router.post('/reset-password', ...
await User.findOneandUpdate({
...
passwordReset: True,
})
비밀번호 변경 요청
function checkPasswordReset(req, res, next) {
if(req.user && req.user.passwordReset) {
res.redirect('/update-password')
return
}
next()
}
---
router.post('/udpate-passwodr', ...
await User.findOneAndUpdate({
...
passwordReset: false,
})
'Backend > Node.js' 카테고리의 다른 글
Node.js - JWT 기본 (0) | 2022.03.07 |
---|---|
(정리) 3계층 구조로 백엔드 회원가입 Rest API 구현 (0) | 2022.03.07 |
Node.js - Async Request Handler (비동기 오류 처리) (0) | 2022.02.26 |
Node.js - Express.js와 MongoDB로 웹서비스 만들기 (0) | 2022.02.26 |
Node.js - Express.js와 REST API (2) (0) | 2022.02.20 |