jongviet

Aug 11, 2021 - Nodejs Auth 처리 관련 본문

node, express, nestjs

Aug 11, 2021 - Nodejs Auth 처리 관련

jongviet 2021. 8. 11. 17:15

*8월11일

 

*index.js

//auth 라우터를 통해서 어느 페이지에서든지 auth 상태 확인 가능
app.get('/api/users/auth', auth, (req, res) => {

//미들웨어를 넘어 온 것은 authentication이 정상 처리된 것; 따라서 해당하는 유저 정보를 프론트로 res
res.status(200).json({
    _id: req.user._id,
    isAdmin: req.user.role === 0 ? false : true,
    isAuth : true,
    email : req.user.email,
    name: req.user.name,
    lastname: req.user.lastname,
    role: req.user.role,
    image: req.user.image
  })
})

 

*Auth.js

const {User} = require('../models/User');

let auth = (req, res, next) => {


    //인증 처리
    //클라이언트 쿠키에서 토큰 get
    let token = req.cookies.x_auth;
    
    //토큰 복호화 후 유저 찾기
    //유저가 존재하면 인증 ok, 유저가 없으면 인증 fail
    User.findByToken(token, (err, user) => {
        if(err) throw err;
        if(!user) return res.json({ isAuth: false, error:true})

        req.token = token; //index.js에서 데이터 쓸 수 있게 넣어줌;
        req.user = user;
        next(); //middldeware 이후로 넘기는 작업
    })
}
module.exports = { auth };

 

 

*User.js
userSchema.statics.findByToken = function(token, cb) {
    var user = this;


    //token decoding
    jwt.verify(token, 'secretToken', function(err, decoded) {
        //유저 아이디 확인 후, 클라이언트 token과 DB token이 일치하는지 확인;
        //findOne 메소드로 mongoDB에 _id와 token이 있는지 확인
        user.findOne({"_id" : decoded, "token": token}, function(err, user) {
            if(err) return cb(err)
            cb(null, user)
        })
    })
}

Comments