2017-12-12 17 views
0

Express.js로 RESTful API를 개발 중이며 인증을 위해 Passport.js를 사용하고 있습니다.특정 경로에 대한 특수 여권 인증

const beerRoutes = require('./beerRoutes')  // an instance of express router 
let authenticateRoute = passport.authenticate('jwt', { session: false }) 

router.use('/beer', authenticateRoute, beerRoutes) 

내부 beerRoutes.js :

이 문제가
const router = require('express').Router() 

router.post('/', (req, res) => {}) 
router.get('/', (req, res) => {}) 
router.patch('/', (req, res) => {}) 
router.delete('/', (req, res) => {}) 

, 내가 인증되지 않은 클라이언트는 새로운 사용자를 생성 할 수 있도록하려는
여기 는 어떻게 경로와 여권을 사용하고의 예입니다 (즉, POST /beer/). 그러나 동일한 끝점에 요청을 보낼 때 인증 된 클라이언트에 추가 권한을 부여하려고합니다.

인증되지 않은 클라이언트가 beerRoutes 내의 다른 경로 (예 : PATCH /beer/)에 액세스하지 못하게하려면 어떻게해야합니까?

답변

0

Passport.js 미들웨어를 호출하는 사용자 지정 미들웨어로 해결할 수 있습니다.

const beerRoutes = require('./beerRoutes')  // an instance of express router 

// let authenticateRoute = passport.authenticate('jwt', { session: false }) 
let authenticateRoute = Authenticate 


router.use('/beer', authenticateRoute, beerRoutes) 
:

const authenticationWhiteList = [ 
    'POST /beer' 
] 


function Authenticate (request, response, next) { 
    let route = `${request.method} ${request.baseUrl}` 

    if (_.indexOf(authenticationWhiteList, route) !== -1) { 
    next() 
    } else { 
    passport.authenticate('jwt', { session: false })(request, response, next) 
    } 
} 

는이 하나의 인증 코드 변경