2013-03-15 23 views
6

我正在Node中使用Express实现RESTful API,而我对这两者都是新手。我想使用基本身份验证来控制访问。Express中的白名单路由可以应用基本认证/中间件吗?

我想申请它使用白名单,但我不知道如何做到这一点。

黑名单是很容易的,我可以只辣椒我#VERB调用与第二个参数:

app.get('/', asyncAuth, requestHandler); 

我可以采取进一步和黑名单的一切:

app.all('*', asyncAuth, requestHandler); 

但我想申请我对每条路线的基本道理,,除了POST /users。有没有一种优雅的方式来做到这一点?我可以使用“黑名单”方法,然后选择性地将其从我想要的路线中删除吗?我无法弄清楚如何。

+1

有趣的问题,我想你的问题更多的是“如何选择一个负面路线“,即匹配除了某些路线外的每条路线 - 优雅。你可以尝试使用正则表达式匹配路线,否定“/用户”,像http://stackoverflow.com/questions/6586197/expressjs-bind-all-routes-except-2-folders? – 2013-03-15 04:35:46

+0

谢谢!我在写词时遇到了麻烦。选择一条负面路线是我想要做的。 我认为使用正则表达式,它会工作,但它感觉有点像黑客。似乎应该有更好的方法。 – Terraflubb 2013-03-15 04:38:31

回答

8

定义您的路线为POST /users黑名单路线前:

app.post('/users', function(req, res) { 
    ... 
}); 

app.all('*', asyncAuth, requestHandler); 
+0

我简直不敢相信这是简单的,它并没有发生在我身上!谢谢,我做了这个改变,所有的测试都是绿色的。 – Terraflubb 2013-03-15 12:01:22

2

你可以保持被列入白名单的正则表达式的列表,并匹配对每个URL的URL列表,如果它匹配任何再进行,否则需要权威性

app.all('*', asyncAuth); 

function asyncAuth(req, res, next) { 
    var done = false; 
    whitelist.forEach(function(regexp) { 
     if (req.url.match(regexp)) { 
      done = true; 
      next(); 
     } 
    }); 
    if (!done) requireAuth(next); 
} 

类似的规定

+0

是的!这将工作。我一直在使用'express.basicAuth(函数(用户名,密码){...}',所以我认为我不能访问'req'。这是一个巧妙的把戏。除非有人知道如何在没有这种解决方法的情况下如何解决问题 – Terraflubb 2013-03-15 04:47:26

相关问题