npm install jsonwebtoken --save
npm install cookie-parser --save
User.js
const jwt=require('jsonwebtoken');
//생략
userSchema.methods.comparePassword=function(plainPasswprd,cb){
//plainPassword와 암호화 된 비밀번호(해싱값)가 같은지 체크
bcrypt.compare(plainPasswprd,this.password,function(err,isMatch){
if(err) return cb(err);
cb(null,isMatch);
});
}
userSchema.methods.generateToken=function(cb){
var user=this;
//jsonwebtoken을 이용해 토큰 생성
var token= jwt.sign(user._id.toHexString(),'secretToken');
user.token=token;
user.save(function(err,user){
if(err) return cb(err);
cb(null,user);
});
}
//생략
index.js
const cookieParser=require('cookie-parser');
app.use(cookeParser());
//생략
app.post('/login',(req,res)=>{
//요청된 이메일이 데이터베이스에 존재하는지 확인
User.findOne({email:req.body.email},(err,user)=>{
//요청한 이메일이 데이터베이스에 없다면, 로그인 실패!
if(!user){
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없음"
});
}
//요청된 이메일이 데이터베이스에 존재한다면, 비밀번호가 데이터베이스에 있는 것과 일치하는지 확인
user.comparePassword(req.body.password,(err,isMatch)=>{
if(!isMatch) return res.json({loginSuccess: false, message: "비밀번호가 틀림"});
//비밀번호까지 일치하면, 토큰 생성
user.generateToken((err,user)=>{
if(err) return res.status(400).send(err);
//토큰 저장. where? 쿠키, 로컬 스토리지, 세션(여기서는 쿠키에 저장)
res.cookie("x_auth",user.token)
.status(200)
.json({loginSuccess:true, userId: user.id});
});
});
});
//생략
www.inflearn.com/course/따라하며-배우는-노드-리액트-기본