Skip to content

Instantly share code, notes, and snippets.

@joonseokhu
Created November 21, 2019 12:55
Show Gist options
  • Save joonseokhu/ad134d18dd18b136ffe404142b40f823 to your computer and use it in GitHub Desktop.
Save joonseokhu/ad134d18dd18b136ffe404142b40f823 to your computer and use it in GitHub Desktop.
express authorization guide

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를 통한 응답을 받을 수 있게 됩니다.

만족시켜야 하는 조건으로 쿼리스트링의 특정값이 아니라 토큰 검증결과나 유저 조회결과 등을 사용한다면 권한 처리 로직 작성하는 용도로 응용이 가능해집니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment