Auth 적용 순서 끄적이기
- 유저 회원가입
- bcript를 이용하여 암호화(Hash)된 암호와 아이디를 userRepository에 저장
- 유저 로그인
- bcript를 이용하여 암호화(Hash)된 암호를 userRepository에 저장
- jwt 토큰 생성하여 사용자(브라우저)에게 보내줌
- 로그인할 때는 사용자가 입력한 비밀번호 & 암호화된 비밀번호가 동일한지 brypt compare로 검증
- 성공적으로 로그인이 되면 jwt 토큰을 보내줌
- 로그인한 사람이라면 header에 authlization을 헤더에 넣어서 보냄
- 미들웨어에서 항상 로그인이 필요한 서비스라면, 미들웨어로 헤더가 존재하는지 & 우리가 발행한 토큰이 맞는지, 유효한지 확인.
사용자가 유효하다면 사용장의 아이디를 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" };
export const isAuth = async (req, res, next)=>{
const authHeader = req.get('Authorization');
if(!(authHeader && authHeader.startsWith('Bearer'))){
return res.status(401).json(AUTH_ERROR);
}
const token = authHeader.split(' ')[1];
jwt.verify(token, SECRET_KEY, async (error, decoded)=>{
if(error){
return res.status(401).json(AUTH_ERROR);
}
const user = await userRepository.findById(decoded.id);
if(!user){
return res.status(401).json(AUTH_ERROR);
}
req.userId = user.id;
next();
})
}```