Search code examples
javascriptnode.jsjwtjson-web-token

JWT How to bypass certain API routes and http methods


I can make get JSON-Web-Token to ignore paths using .unless like this.

app.use(expressJWT({secret: config.JWTSECRET}).unless({path: 
['/register', 
'/authentication',
]}));

I have a route with different HTTP methods (get, put, post, delete). I want the GET version of /events to not require a token, but the POST version of /event to require a token. Can I do this without having different routes for GET and POST etc.

/events //GET - no token required
/events //POST - token required

Solution

  • If I know right, the express-jwt module is using express-unless to give you .unless method. With that, you can use a custom function to filter the request.

    var filter = function(req) {return true;}
    app.use(expressJWT({ secret: config.JWTSECRET}).unless(filter));
    

    In the filter function, you can check the route (req.path) and the request type (req.method).