2013-04-27 37 views
1

所以,我使用Node.js + Swagger + MongoDB。Swagger + Node.js的异步验证功能

我试图验证所有的请求都带有一个有效的auth_token,这是一个存储在mongo用户上的值。 我的问题是Swagger支持的验证器需要返回true或false,但由于我必须检查Mongo以验证auth令牌,整个验证将变为异步。

下面是情况下,代码,你需要它:

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers["auth_token"]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url,true).query["auth_token"]; 
     } 

     models.user.validateAuthToken(apiKey, function(err, valid) { 
     //Here is where I know if the auth token is valid and it checks against Mongo, so it's async 
     }); 

    return [something]; //this is what the validation sequence is expecting this function to do: return true or false 
}); 

我怎样才能解决这个问题呢?

回答

1

你不能,你可能想打开一个与swagger票证启用异步验证。

+0

哦,我做了,并提交了拉请求。让我们希望他们接受它。如果有人需要它,我叉起大摇大摆,为我的需求创建了一个单独的模块,并修复了它,它叫做:swagger-node-express-ext – Deleteman 2013-05-15 16:55:10

+0

@Deleteman:这个问题有什么更新吗?我看到了您的存储库,但未找到请求并且您的回购已过期。另外,我在谷歌组上发现了这个讨论,也谈到了我找不到的一些拉取请求:https://groups.google.com/forum/#!topic/swagger-swaggersocket/UIgWkXYHBh0 – wegenerd 2014-05-09 23:53:20

0

并且返回异步函数的结果不起作用?

swagger.addValidator(
    function validate(req, path, httpMethod) { 
     var apiKey = req.headers[ 'auth_token' ]; 
     if (!apiKey) { 
     apiKey = url.parse(req.url, true).query[ 'auth_token' ]; 
     } 

     return models.user.validateAuthToken(apiKey, function(err, valid) { 
     // check against mongo 
     return validation; 
     });  
}); 
+0

我给它一个镜头,但它听起来不像JS会等待validateAuthToken方法返回以便从addValidator返回,它可能会返回null。不过谢谢。 – Deleteman 2013-04-29 03:38:47

1

你在使用Swagger 1.2还是2.0?如果使用2.0,则可以使用swagger-tools连接中间件,以根据Swagger文档为安全处理程序的请求进行连接。它支持Swagger Specification中定义的所有安全机制。

+0

这是一个老问题,我可能使用的是1.2,但最好在这里提供这些更新的信息,以防其他人遇到同样的问题。 – Deleteman 2015-02-25 10:43:34