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 

참고 : token을 decode 하기

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