2017-08-09 108 views
0

我希望快速GET跳过令牌验证。我想让每个人都可以发送GET请求,而只需发布,放置,删除授权用户的请求。以下是我的逻辑,但是响应挂起。我试图使用嵌套的快速使用方法。GET请求的跳过令牌验证

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

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

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

或有任何其他的方法来处理这个

+0

只需设置您的'GET'路由,然后应用您的令牌认证中间件,任何超出该路由的路由都将受到保护。 – James

+0

我在不同的路径文件中有超过五十个GET请求,所以在每种方法中我都会遇到困难,但我表示不允许。我想在每个路由 – Developer

+0

中尝试使用app.use来代替app.get,以便确认您的整个'/ api/someroute'都是'GET'请求? – James

回答

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..."}); 
    } 
}; 
+0

我想app.use coz有五十个路由,所以router.get(“/ route1 “,handlerRoute1);这将无法正常工作 – Developer

+0

如果方法是得到然后允许如果不是然后验证令牌 – Developer

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请求。

+0

谢谢詹姆斯,但我提到我想保护职位,并把所有的请求都要求保持不受保护 – Developer

+0

@Developer只是一个错字,你有没有尝试过的代码? – James