[Node.js] Authentication 적용 순서

Liam·2021년 11월 29일
2

node.js

목록 보기
2/2
post-custom-banner

Auth 적용 순서 끄적이기

  1. 유저 회원가입
  2. bcript를 이용하여 암호화(Hash)된 암호와 아이디를 userRepository에 저장
  3. 유저 로그인
  4. bcript를 이용하여 암호화(Hash)된 암호를 userRepository에 저장
  5. jwt 토큰 생성하여 사용자(브라우저)에게 보내줌
  6. 로그인할 때는 사용자가 입력한 비밀번호 & 암호화된 비밀번호가 동일한지 brypt compare로 검증
  7. 성공적으로 로그인이 되면 jwt 토큰을 보내줌
  8. 로그인한 사람이라면 header에 authlization을 헤더에 넣어서 보냄
  9. 미들웨어에서 항상 로그인이 필요한 서비스라면, 미들웨어로 헤더가 존재하는지 & 우리가 발행한 토큰이 맞는지, 유효한지 확인.
    사용자가 유효하다면 사용장의 아이디를 req object 에 user.id를 저장해놓음.
    -Auth 인증완료
    이때 저장한 userid 정보를 이용하여, Auth 다음 미들웨어에서 유저정보를 알 수 있음.

Authentication 미들웨어 구현


import jwt from "jsonwebtoken";
import * as userRepository from "../data/auth.js";

const AUTH_ERROR = { message: "Authentication Error" };

//비동기로 사용할 수 있는 콜백함수, Express에서 사용하는 middleware 
export const isAuth = async (req, res, next)=>{
    //header 안에 Authorization key 의 valuse를 가져옴
    const authHeader = req.get('Authorization');
    //authHeader가 없거나, Bearer로 시작하지 않으면 auth error 처리
    if(!(authHeader && authHeader.startsWith('Bearer'))){
        return res.status(401).json(AUTH_ERROR);
    }

    //Authorization header에서 token만 가져옴
    const token = authHeader.split(' ')[1]; //공백으로 분리

    //token이 유효한지 검증
    jwt.verify(token, SECRET_KEY, async (error, decoded)=>{
        if(error){
            return res.status(401).json(AUTH_ERROR);
        }
        const user = await userRepository.findById(decoded.id); //존재하는 user인지 확인
        if(!user){
            return res.status(401).json(AUTH_ERROR);
        }
        //token이 있을때만 req 자체에 userid를 추가해줌. 
        //앞으로 이어질 콜백합수에서 동일하게 접근해야하는 데이터라면 이렇게 등록해줄 수 있음\
        //이렇게하면 req에는 username, token, userId가 존재
        req.userId = user.id;
        next();
    })
}```
profile
🚀티끌모아 백엔드 개발자
post-custom-banner

0개의 댓글