Search code examples
expressexpress-jwt

Handling parameterised routes in express-jwt using unless


Given the following route:

router.get('/api/members/confirm/:id, function (req, res, next)

how do I specify the route to be excluded? I have tried:

app.use('/api', expressJwt({ secret: config.secret}).unless({path: ['/api/members/confirm']}));

and

app.use('/api', expressJwt({ secret: config.secret}).unless({path: ['/api/members/confirm/:id']}));

but neither path in the unless array seem to work?


Solution

  • The express-jwt module is using express-unless to give you this unless method, which doesn't accept express' :param path arguments syntax.

    But it does accept a regex, so you could do this:

    app.use('/api', expressJwt({ secret: config.secret}).unless({path: [/^\/api\/members\/confirm\/.*/]}));
    

    If you don't like that, you can also give unless a function:

    var myFilter = function(req) {return true;}
    app.use('/api', expressJwt({ secret: config.secret}).unless(myFilter));