[express.js] authMiddleware

김민재·2024년 4월 2일

express.js

목록 보기
15/39

authMiddleware를 생성해서 토큰을 갖고 있어야 middleware를 지나갈 수 있게 하는 방법

  1. authMiddleware 함수를 만들어준다.
function authMiddleware(req, res, next) {
  // 토큰을 request headers에서 가져오기
  const authHeader = req.headers.authorization;
  console.log(authHeader);
  // Beare 토큰
  const token = authHeader && authHeader.split(" ")[1];
  console.log(token);
  if (!token) return res.sendStatus(401);

  // 토큰이 있으면 유효한 토큰인지 확인
  jwt.verify(token, secretKey, (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
        // authMiddleware를 실행하는 곳에서 req.user를 실행하면 payload값을 가져올 수 있다.
    next();
  });
}
  • 토큰은 req.headers.authorization에 담기게 되는데 변수에 담아둔다.
  • authHeader 변수를 보면

    이렇게 Bearer 토큰 형식으로 돼있다. token이 존재하고, token을 split을 이용해서 가져온다.
  • 그리고 token이 없다면 Unauthorzation 에러를 띄운다.
  • jwt.verify()를 이용해서 토큰이 있다면 req.user = user의 정보를 담아주고, 없다면 Forbidden 에러를 띄운다. 다음 함수를 실행할 수 있게 next()로 마무리한다.
  1. authMiddleware 함수를 만들었으면, authMiddleware가 필요한 경로에 넣어준다.
app.get("/posts", authMiddleware, (req, res) => {
  res.json(posts);
});
  • 이제 posts 경로를 갈 시에 authMiddleware 함수를 실행한다.

포스트맨으로 확인해보자

  1. 우선 토큰이 없을 때 posts 경로를 실행해보면,
  • authMiddleware에서 처리했던 데로 Unauthorized 에러가 나온다.
  1. 그럼 login 경로로 가서 token을 생성하자.
  • accessToken에 토큰이 담긴 걸 볼 수 있다. 이 토큰을 이용해서 posts 경로로 이동이 가능해진다.
  1. 토큰을 이용해 posts 경로로 가보자.
  • Authorization에서 Beare Token 설정해주고 오른쪽 Token에 담으면 posts 경로로 이동할 수 있는 걸 보게 된다.
    그럼 정상적으로 미들웨어를 통과가 가능해진다.
profile
개발 경험치 쌓는 곳

0개의 댓글