1. ../routes/login.js
const express = require("express");
const User = require("../models/User");
const router = express.Router();
const bcrypt = require("bcryptjs"); // 암호화 모듈
const jwt = require("jsonwebtoken");
router.post('/', (req, res)=>{
// 요청된 이메일을 db에서 찾는다.
User.findOne({email: req.body.email}, (err, user)=>{
if(!user){
return res.json({
loginSuccess: false,
message: "Unvalid email"
});
}
// 요청된 이메일이 db에 있다면 비밀번호 일치여부 확인
user.comparePassword(req.body.password, (err, isMatch)=>{
if(!isMatch)
return res.json({
loginSuccess:false,
message:"Wrong password"
});
// 일치 시, 토큰 생성. 생성한 토큰을 쿠키에 저장한다
user.generateToken((err, user)=>{
if(err) return res.status(400).send(err);
// 토큰을 쿠키에 저장
res.cookie("x_auth", user.token)
.status(200)
.json({
loginSuccess: true,
userId: user._id,
token: user.token,
name: user.name,
email: user.email,
password: user.password
});
});
});
});
});
module.exports = router;
2. User 모델에 추가
userSchema.methods.comparePassword=function(plainPassword, cb){
bcrypt.compare(plainPassword, this.password, function(err, isMatch){
if(err) return cb(err);
cb(null, isMatch);
});
}
userSchema.methods.generateToken=function(cb){
const user=this;
const token=jwt.sign(user._id.toHexString(), 'secretToken');
user.token=token;
user.save(function(err, user){
if(err) return cb(err);
cb(null, user);
});
}
위에는 비밀번호 비교해서 해당 유저가 맞는지 확인
아래는 token 생성해서 로그인시 제공!
3. Postman 결과 화면
login 성공 여부, userId, token, 이름, 이메일, 비밀번호 출력 완료!!
'Backend > nodejs' 카테고리의 다른 글
[AWS S3] S3 사용하기 ( aws-sdk, multer-s3 모듈 ) (0) | 2022.09.18 |
---|---|
헤로쿠(heroku)로 Node.js 배포 (0) | 2022.09.18 |
[Node.js] Re:웃주민 회원가입/jwt token api 구현 (0) | 2022.09.11 |
[Node.js] app.js 포함 모듈들 (0) | 2022.09.11 |
[Node.js] vscode nodejs 초기 세팅 (0) | 2022.09.11 |