요청된 email 을 db에서 찾고,
비밀번호가 일치하는 지 확인
토큰 생성 npm install jsonwebtoken --save
토큰 쿠키에 저장 npm install cookie-parser --save
app.post('/login',(req,res)=>{
// 요청된 email 을 db에서 찾기
User.findOne({email : req.body.email},(err,user)=>{
if(!user){
return res.json({
loginSuccess : false,
message : "제공된 이메일에 해당하는 유저가 없습니다"
})
}
//user.comparePassword()
})
})
userSchema.methods.comparePassword = function(plainPassword,cb){
// plainPassword와 암호화된 비밀번호가 일치하는 지 확인
bcrypte.compare(plainPassword, this.password, function(err,isMatch){
if(err) return cb(err);
cb(null, isMatch);
})
}
https://www.npmjs.com/package/bcrypt
app.post('/login',(req,res) => {
User.findOne({email : req.body.email}, (err,user)=>{
...
user.comparePassword(req.body.password, (err, isMatch) => {
if(!isMatch)
return res.json({ loginSuccess : false, message : "비밀번호가 틀렸습니다"})
// 토큰 생성하는 함수
//user.generateToken();
})
}
}
userSchema.method.generateToken = function(cb){
var user = this;
// json web token 이용하여 token 생성하기
// user id 와 두번째 param 으로 토큰을 만들고, param 을 이용하여 나중에 userid를 찾아낸다.
var token = jwt.sign(user._id.toHexString(), "secretToken")
user.token = token
user.save( function (err, user) {
if(err) return cb(err);
cb(null,user)
})
}
user.generateToken((err, user) => {
if(err) return res.status(400).send(err)
// token 을 쿠키에 저장한다
res.cookie("x_auth", user.token)
.status(200)
.json({loginSuccess : true, userId : user.user_id})
})
token 은 쿠키 말고 local storage 에 저장해도 된다
app.post('/login',(req,res)=>{
// 요청된 email을 db에서 찾기
console.log(req.body)
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)
// 토큰을 저장한다. 어디에? 쿠키, 로컬스토리지
res.cookie("x_auth", user.token)
.status(200)
.json({loginSuccess : true, userId : user.user_id})
})
})
})
})
// cb : call back
userSchema.methods.comparePassword = function(plainPassword, cb){
// plainPassword를 암호화된 비밀번호와 일치하는지
bcrypt.compare(plainPassword, this.password, function(err, isMatch){
if(err) return cb(err);
cb(null, isMatch)
})
}
userSchema.methods.generateToken = function(cb){
var user = this;
// json web token 이용해서 token 생성하기
// user id 와 두번째 param 으로 토큰을 만들고, param 을 이용하여 나중에 userid를 찾아낸다.
var token = jwt.sign(user._id.toHexString(), "secretToken")
user.token = token;
user.save(function(err, user){
if(err) return cb(err);
cb(null, user)
})
}