관리 메뉴

CASSIE'S BLOG

미들웨어함수 본문

PROGRAMMING/면접준비

미들웨어함수

ITSCASSIE1107 2023. 12. 9. 19:30
반응형

미들웨어 함수들은 Express.js에서 요청(req)과 응답(res) 사이에 위치하여, 요청이 처리되기 전이나 후에 특정 기능을 수행할 수 있는 함수들입니다. 이러한 미들웨어 함수들은 주로 Express 애플리케이션의 라우팅 과정에서 사용되며, 다양한 역할을 수행할 수 있습니다.

  1. verifyToken: 사용자가 보낸 토큰의 유효성을 확인하고, 유효한 경우 해당 사용자를 식별하여 요청 객체(req)에 사용자 정보를 추가합니다. 이를 통해 후속 미들웨어나 라우터에서 해당 사용자의 정보를 활용할 수 있습니다.
  2. verifyTokenAndAuthorization: verifyToken을 호출한 후, 해당 사용자가 특정 리소스에 대한 권한을 가지고 있는지 확인합니다. 예를 들어, 사용자 ID가 경로의 ID와 일치하거나 사용자가 관리자인 경우에만 요청이 처리되도록 허용합니다.
  3. verifyTokenAndAdmin: verifyToken을 호출한 후, 해당 사용자가 관리자 권한을 가지고 있는지 확인합니다. 이 미들웨어는 주로 특정 작업에 대한 권한이 있는지를 확인하고, 관리자 권한이 있는 경우에만 해당 작업을 수행하도록 허용합니다.

미들웨어 함수들은 애플리케이션에서 중복되는 코드를 방지하고, 특정 요청에 대한 로직을 모듈화하여 유지보수성을 높이는 데에 사용됩니다. 또한, 요청의 흐름을 변경하거나 요청과 응답 객체를 수정하여 추가적인 작업을 수행할 수 있습니다.

 

미들웨어함수 예시: 

const jwt = require("jsonwebtoken");

const verifyToken = (req, res, next) => {
  const authHeader = req.headers.token;
  if (authHeader) {
    const token = authHeader.split(" ")[1];
    jwt.verify(token, process.env.JWT_SEC, (err, user) => {
      if (err) res.status(403).json("Token is not valid!");
      req.user = user;
      next();
    });
  } else {
    return res.status(401).json("You are not authenticated!");
  }
};

const verifyTokenAndAuthorization = (req, res, next) => {
  verifyToken(req, res, () => {
    if (req.user.id === req.params.id || req.user.isAdmin) {
      next();
    } else {
      res.status(403).json("You are not alowed to do that!");
    }
  });
};

const verifyTokenAndAdmin = (req, res, next) => {
  verifyToken(req, res, () => {
    if (req.user.isAdmin) {
      next();
    } else {
      res.status(403).json("You are not alowed to do that!");
    }
  });
};

module.exports = {
  verifyToken,
  verifyTokenAndAuthorization,
  verifyTokenAndAdmin,
};

 

 

req.user = user; next();: 토큰이 유효하고 인증이 성공한 경우, 사용자 객체(user)를 요청 객체(req)에 추가하고 다음 미들웨어 함수로 제어를 전달합니다.

 

next() 함수는 Express 미들웨어에서 요청과 응답을 전달하고, 다음 미들웨어 함수나 라우터 핸들러로 제어를 넘기는 역할을 합니다.

반응형

'PROGRAMMING > 면접준비' 카테고리의 다른 글

Wrapper 클래스는 무엇이며 언제 사용하나요?  (0) 2023.12.09
Array와 ArrayList의 차이  (0) 2023.12.09
Networking Protocols  (2) 2023.12.08
서버이중화 (High Availability)  (1) 2023.12.08
DNS 작동원리  (2) 2023.12.08