Auth 기능
어떤 페이지에 로그인된 유저만 사용 가능하게 만들어야 하는 기능이 필요하다.
따라서 로그인하여 Token이 발급된 유저만 사용 가능하게끔 만드는 Auth기능을 만들어야 한다.
Cookie에 저장된 token을 decode
우선 auth를 위한 middleware가 필요하니 middleware 폴더를 root에 만든 뒤, auth.js파일을 생성하여 다음과 같이 작성한다.
const { User } = require("../models/User");
let auth = (req, res, next) => {
//인증 처리
//client cookie token 가져오기
let token = req.cookies.x_auth;
//토큰 복호화 & user 찾기
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};
client의 cookie에서 token을 가져와 DB에서 id와 token으로 일치하는 user를 찾는다.
만약 중간에 err가 발생하거나 일치하는 user가 없다면 예외처리를 하고 분기시킨다. 그렇지 않고 일치하는 user를 찾게 되면 다음으로 넘겨준다. 다음으로 넘겨준다는 의미는 라우터에서 이제 올바른 값을 처리할 수 있는 환경이 되는 것이다.
이제 auth라우터만 작성하면 된다.
auth라우터는 다음과 같이 작성한다.
app.get('/api/users/auth', auth, (req, res) => {
res.status(200).json({
_id: req.user._id,
//0 => User, 1 => Admin
isAdmin: req.user.role === 0 ? false : true,
isAuth : true,
email: req.user.email,
name: req.user.name
})
})
req의 user정보들을 사용할 수 있는 이유는 auth라는 미들웨어에서 이미 인증처리를 완료했기 때문에 user정보가 담겨있다. 그래서 원하는 정보를 json으로 묶어 res에 담아 전달하면 된다.