본문 바로가기
Web/React Node js

노드 기초 강의 (10) - Auth 기능

by SeleniumBindingProtein 2022. 2. 28.
728x90
반응형

1. Auth

 1) Auth : 인증, 권한부여 등의 줄임말로 인증은 자신이 누구라고 주장하는 사람을 확인하는 절차이며, 

                권한부여는 가고 싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정

    => Auth Route란 쉽게 말해 인증 기능을 구현하는 것

 2) 페이지마다 로그인이 되어 있는지 안되어 있는지 확인하고, 페이지에 권한이 있는 관리자 유저인지 등을 체크하기 위해

      Auth Route가 필요함 

 3) Auth Route 구현방법

     => 토큰을 만들면서 Client에는 Cookie, Server에는 DB에 저장을 해줬고,

           서버와 클라이언트에 있는 두가지 토큰이 일치하는가를 계속적으로 체크해서 인증 권한을 확인해줌

 

2. Auth Route 구현

 1) 구현 순서

     => Cookie에서 저장된 Token을 Server에서 가져와 복호화를 함

     => 복호화를 하면 UserID가 나오는데, 그 UserID를 이용하여 데이터베이스 User Collection에 있는지 확인함

     => 유저를 찾은 후 쿠키에서 받아온 Token을 유저도 갖고 있는지 확인함 

 

 2) Auth Route 생성

     => Get을 이용해서 Auth Route 코드 작성

       엔드포인트와 (req, res) 중간에 있는 auth 미드웨어가 들어가며,

       미드웨어는 엔드포인트에서 리퀘스트를 받은 후, 콜백함수를 실행하기 전에 중간에서 먼저 실행되는 것을 의미함

app.get('/api/users/auth', auth ,(req,res) => {

})

     => 미드웨어를 실행하기 위해 middleware폴더와 auth.js파일 만들기

 

     => auth.js 파일 안에 인증처리 코드 생성

let auth = (req, res, next) => {
    //인증 처리를 하는 곳
    // 1. Client Cookie에서 Token을 가져온다.
    // 2. Token을 복호화 한 후 유저를 찾는다.
    // 3. 유저가 있으면 인증 Okay
    // 4. 유저가 없으면 인증 No!

}

module.exports = {auth};

         => let token = req.cookie.x_auth 부분은 Login Route에서 cookie에 저장해준 x_auth를 가져온 것

         => 가져온 Token으로 User를 찾기 위해 User 모델에 findByToken 함수 생성

         => 미드웨어 파일 코드 

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

let auth = (req, res, next) => {
    //인증 처리를 하는 곳
    // 1. Client Cookie에서 Token을 가져온다.
    let token = req.cookies.x_auth;

    // 2. Token을 복호화 한 후 유저를 찾는다.
    User.findByToken(token, (err,user) =>{
        if(err) throw err;
        if(!user) return res.jsob({ isAuth: false, error: true})

        req.token = token;
        req.user = user;
        next();
    })
    // 3. 유저가 있으면 인증 Okay
    // 4. 유저가 없으면 인증 No!

}

module.exports = {auth};

     => 클라이언트에게 정보 전달

//role 1 어드민 role 2 특정 부서 어드민
//role 0 일반유저 role 0이 아니면 관리자 
app.get('/api/users/auth', auth ,(req,res) => {
    //여기까지 미들웨어를 통해왔다는 얘기는 Authentication 이 true 라는 의미 
    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
    })
})
728x90
반응형

댓글