express의 미들웨어는 인자로 받은 next
함수가 실행되면 다음으로 등록된 미들웨어를 실행시킵니다.
이걸 이용해서 권한 컨트롤이 가능합니다
다음과 같은 컨트롤러가 있습니다.
const onlyGoodPeopleCanUseIt = (req, res, next) => {
if (req.query.good === 'yes') {
return next()
} else {
res.status(403).json({
message: 'You are not good'
})
}
}
쿼리스트링으로 good에 해당하는 값이 'yes'라면 다음 미들웨어가 실행되고, 그렇지 않다면 403 응답을 합니다.
이것을 가지고 라우터에 있는 어떤 라우트를 작성했다고 합시다.
// 기존
router.get('/happiness', getHappiness)
// 변경
router.get('/happiness', onlyGoodPeopleCanUseIt, getHappiness)
onlyGoodPeopleCanUseIt
미들웨어에서 next
가 실행되어야만 다음 미들웨어인 getHapiness
가 동작합니다.
즉, 요청의 쿼리스트링으로 특정 조건을 만족시켜야만 본 컨트롤러인 getHappiness
를 통한 응답을 받을 수 있게 됩니다.
만족시켜야 하는 조건으로 쿼리스트링의 특정값이 아니라 토큰 검증결과나 유저 조회결과 등을 사용한다면 권한 처리 로직 작성하는 용도로 응용이 가능해집니다