인증 절차를 다른 엔드포인트에 적용하기 / Middleware

Gaeun·2022년 12월 26일
0

wecode TIL

목록 보기
13/24

1. Validate Token Middleware

1-1. Middleware

Middleware는 Express 서버의 라이프 사이클에서 요청과 응답 중간에서 목적에 맞게 기능을 처리하는 함수이다. Express.js는 내장 Middleware를 제공 하기도 하지만, 사용자가 원하는 특정 작업을 수행하게 할 수 있게 사용자가 직접 Middleware를 정의 할 수 있다.

Middleware를 직접 정의 할 때는 3개의 인자를 받아야한다. 그리고 next() 함수를 통해 다음 middleware가 호출이 되어야 한다.

const myCustomMiddleware = async(req, res, next) => {
    ...
	
    next()
}
  • req: HTTP request 객체
  • res: HTTP response 객체
  • next: 다음 middleware 호출 함수

1-2 Validate Token Middleware

Cunstom Middleware을 관리하기 위해 middleware 디렉토리를 만들고 auth.js 파일을 만든다.

const validateToken = async (req, res, next) => {
    try {
        const token = req.headers.authorization; 	// (1)

	. . .											// (2)

	next(); 										// (3)
    } catch (err) {
        next(err); 
    }
};
  • (1): request의 headers에서 token 가져오기
  • (2): token 검증 코드 작성
  • (3): 검증 완료 후 다음 middleware 실행

1-3. Router에 Middleware 추가

1-3-1. 기본 router

const express = require("express");
const router = express.Router();

const { postController } = require("../controllers");

router.post("", postController.createPost); 
// ㄴ 두 번째 인자로 실행할 Controller 넣어주기
module.exports = router;

1-3-2. Middleware 추가

기본 router에서 두번째 인자로 실행할 Controller을 넣어줬다면, Middleware을 추가 할 때는 두번째 인자로 Middleware 함수를 넣어준다. 그리고 세번째 인자로 실행할 Controller을 넣어주면 된다.

const express = require("express");
const router = express.Router();
import { validateToken } from '../middlewares/auth';

const { postController } = require("../controllers");

router.post("", validateToken, postController.createPost); 
// ㄴ 두 번째 인자로 Middleware 함수, 세 번째 인자로 실행할 Controller
module.exports = router;

2. Summary

  • Middleware는 Express 서버의 라이프 사이클에서 요청과 응답 중간에서 목적에 맞게 기능을 처리하는 함수
  • 기본으로 제공하는 내장 Middleware뿐만 아니라 사용자가 원하는 특정 작업을 수행하게 할 수 있게 사용자가 직접 Middleware를 정의할 수 있음
  • Middleware를 직접 정의 할 때는 request, response, next를 인자로 받아야 하며 next() 함수를 통해 다음 Middleware를 호출
  • Token을 검증하는 Custom Middleware를 만들어 로그인을 한 사용자만 이용할 수 있는 함수를 실행하기 전에 인증 절차를 진행 할 수 있음
  • Router에 token을 검증하는 Middleware을 추가하여 Router Middleware → Token 검증 Middleware → Controller 순으로 코드를 진행 할 수 있음
profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글