각 페이지에서 로그인이 된 유저/관리자인지를 확인하는 방법
userSchema.statics.findByToken = function(token, cb){
var user = this;
// decode token
jwt.verify(token, 'secretToken', function(err,decoded){
// 유저 아이디를 이용하여 유저를 찾은 다음에
// 클라이언트에서 가져온 token 과 db 의 token 이 일치하는 지 확인
user.findOne({"_id" : decoded, "token" : token}, function(err, user){
if(err) return cb(err);
cb(null, user)
})
})
}
const { User } = require('../models/User');
let auth = (req, res, next) => {
// 인증 처리를 하는 곳
// 클라이언트 쿠키에서 토큰을 가져온다.
let token = req.cookies.x_auth;
// 토큰을 복호화 한 후 유저를 찾는다
User.findByToken(token, (err,user) => {
if(err) throw err;
if(!user) return res.json({ isAuth : false, err : true})
req.token = token;
req.user = user;
next();
})
// 유저가 있으면 인증 success
// 유저가 없으면 인증 fail
}
module.exports = { auth };
auth
: middleware app.get('/api/users/auth', auth , (req,res) =>{
// 여기까지 미들웨어를 통과해 왔다는 얘기는 Authentication == true
res.status(200).json({
_id : req.user._id,
isAdimin : req.user.role == 0 ? false : true,
isAuth : true,
email : req.user.email,
name : req.user.lastname,
role : req.user.role,
img : req.user.image
})
})