跳过GET请求的令牌验证

时间:2017-08-09 10:46:11

标签: node.js express

我希望快递中的GET方法可以跳过令牌验证。我希望允许每个人都获得GET请求,而只需要授权用户发布,放置,删除请求。这是我的逻辑,但响应挂起。我试着用嵌套的快速使用方法。

app.use(function(req, res, next) {
if (req.method === 'GET') {

    app.use('/api/someroute', routes);

}
else{
    //do verification below the next
    next();
    }
})

还是有其他办法来处理这个

2 个答案:

答案 0 :(得分:0)

只需在所需路线中加入中间件:

var router = express.Router();

// no middleware included for get request
router.get("/route1", handlerRoute1); 
router.get("/route2", handlerRoute2);

// include some middleware
router.post("/route3", myMiddleware1, myMiddleware2, handlerRoute3); 
app.use(router);

myMiddleware1和myMiddleware2的样子:

myMiddleware1 = function(req, res, next){
    // verify token, etc, ....

    var success = true;

    // call next on success
    if(success)
      return next();
    else
    {
       // raise error
       return res.status(500).json({error: "Missing token..."});
    }
};

答案 1 :(得分:0)

这是因为在GET请求的场景中,您实际上并未完成请求(或从该中间件转移)。中间件按顺序处理,即先到先服务。如果您只想保护除GET请求之外的所有内容,那么这样的事情就可以了:

app.use(function(req, res, next) {
  // let GET requests through
  if (req.method === 'GET') return next();

  // perform token auth on all other requests, next() if OK
});
// setup routes
app.use('/api/someroute', routes);

您先设置中间件,然后再申报路由,这意味着任何进入的请求都必须通过您的令牌检查,在这种情况下,您只需跳过GET请求。