Node.js : Auth 기능 만들기

김가영·2020년 10월 7일
0

Node.js

목록 보기
5/34
post-thumbnail

각 페이지에서 로그인이 된 유저/관리자인지를 확인하는 방법

함수 만들기

  • .User.js 파일에서
userSchema.statics.findByToken = function(token, cb){
    var user = this;
    

    // decode token
    jwt.verify(token, 'secretToken', function(err,decoded){
        // 유저 아이디를 이용하여 유저를 찾은 다음에
        // 클라이언트에서 가져온 token 과 db 의 token 이 일치하는 지 확인

        user.findOne({"_id" : decoded, "token" : token}, function(err, user){
            if(err) return cb(err);
            cb(null, user)
        })
    })
}

auth 파일 만들기

  • middleware / auth.js
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, err : true})

        req.token = token;
        req.user = user;
        next();
    })

    // 유저가 있으면 인증 success

    // 유저가 없으면 인증 fail 
    
}

module.exports = { auth };

index.js

  • auth : middleware
app.get('/api/users/auth', auth , (req,res) =>{
    // 여기까지 미들웨어를 통과해 왔다는 얘기는 Authentication == true
    res.status(200).json({
        _id : req.user._id,
        isAdimin : req.user.role == 0 ? false : true,
        isAuth : true,
        email : req.user.email,
        name : req.user.lastname,
        role : req.user.role,
        img : req.user.image
    })
})
profile
개발블로그

0개의 댓글