User.js
userSchema.methods.generateToken = function(cb) {
//로그인 시 토큰 생성
// user id + 'loginToken'을 암호화
var user = this;
var token = jwt.sign(user._id.toHexString(),'loginToken')
user.token = token;
user.save(function (err, user){
if(err) return cb(err)
cb(null, user);
})
}
userSchema.statics.decodeToken = function (token, cb) {
//토큰을 복호화 하여 _id를 얻고 이를 데이터베이스에서 조회
var user = this;
jwt.verify(token,'loginToken',function(err, decode){
user.findOne({'_id':decode, 'token':token}, function(err, user){
if(err) return cb(err);
cb(null, user);
})
})
}
auth.js
const { User } = require('../models/User')
let auth = (req, res, next) => {
//로그인 인증 처리
//클라이언트 쿠키에서 토큰 가져오기
let token = req.cookies.x_auth
//토큰 복호화 후 데이터베이스에서 유저 정보 찾기
User.decodeToken(token, (err,user)=>{
if(err) throw err
if(!user) {
return res.json({
authentication : false,
error : true,
message: '토큰 정보가 존재하지 않습니다.'
})
}
//호출된 곳의 req로 token과 user정보 보냄
req.token = token
req.user = user
next()
})
}
module.exports = { auth }
데이터베이스 user 인스턴스에 쿠키와 같은 토큰이 저장되어있는데 자꾸만
if(!user) {
return res.json({
authentication : false,
error : true,
message: '토큰 정보가 존재하지 않습니다.'
})
}
이쪽으로 들어가요,, 어떤 것이 문제일까요?