node.JS
[Node.js] AUTH 만들기
worri-pi
2022. 1. 1. 22:05
페이지 이동 시 로그인이 되어있는 상태인지 CHK 할 수 있어야한다.
Client쪽 COOKIE 에 저장된 TOKEN을 DECODE 해서 SERVER로 가져온다. 그러기 위해 AUTH를 만든다.
request를 받은 후 callback function 하기 전 중간에서 'auth' 받아오기
middleware/auth.js 만들기
const { User } = require("../models/User"); //user model 불러오기
let auth = (req,res,next)=>{
//인증처리
//Client Cookie 에서 Token을 가져온다.
let token =req.cookies.x_auth; //index.js에서 cookie에 넣을 때 x_auth 라는 이름을 이용하여 넣었다.
//Token을 복호화한 후 유저를 찾는다.
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(); //index.js 에서 middleware에서 계속 진행할 수 있도록 작성
})
//유저가 있으면 인증 OK
//유저가 없으면 인증 NO
}
user.js에서 findByToken
userSchema.statics.findByToken = function(token,cb){
var user = this;
// user._id + '' = token
//token을 decode 한다.
jwt.verify(token, 'secretToken', function(err,decoded){ //decoded : decode된 user._id
//user id 이용하여 user 찾은 후 client 에서 가져온 token과
//DB 에 보관된 token이 일치하는지 확인하기
user.findOne({"_id": decoded, "token": token}, function(err,user){ //findOnde:mongodb에서 제공하는 메소드
if(err) return cb(err);
cb(null,user)
})
})
}
index.js
const {auth} = require('./middleware/auth');
app.get('/api/users/auth',auth,(req,res)=>{
//여기까지 middleware(auth)를 통과했다는 얘기는 authentication이 true 라는 말
res.status(200).json({
_id: req.user._id,
isAdmin: req.user.role === 0? false : true, //0이면 일반 user, 0이 아니면 advisor
isAuth : true,
email: req.user.email,
name: req.user.name,
lastname: req.user.lastname,
role: req.user.role,
image: req.user.image
})
})
728x90