app.get('/api/users/auth', auth, (req, res)=>{
})
})
이때 middleware 폴더는 root directory에 만들어주어야 한다.
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, error:true})
req.token = token;
req.user = user;
next();
})
}
module.exports = {auth};
userSchema.statics.findByToken = function(token, cb){
var user = this;
// 토큰을 decode 한다.
jwt.verify(token, 'secretToken', function(err, decoded){
// 유저 id를 이용해서 유저를 찾은 다음
// 클라이언트에서 가져온 token과 db에 보관된 토큰이 일치하는지 확인
user.findOne({ '_id': decoded, 'token':token}, function(err, user){
if(err) return cb(err)
cb(null, user)
})
})
}
app.get('/api/users/auth', auth, (req, res)=>{
res.status(200).json({
_id:req.user._id,
idAdmin:req.user.role === 0? false:true, // 여기는 role이 뭐냐에 따라 언제든 바뀔 수 있는 코드임.
isAuth : true,
email : res.user.email,
name : res.user.name,
lastname : res.user.lastname,
role : res.user.role,
image : res.user.image
})
})
큰 뼈대부터 함수틀만 잡아주고 세부적인 동작기능부터 만든다음 다시 큰 뼈대쪽으로 빠져나오면서 완성시킨다.