Swagger + Node.js的异步验证功能

时间:2013-04-27 00:26:43

标签: node.js mongodb swagger

所以,我正在使用Node.js + Swagger + MongoDB。

我正在尝试验证所有请求都带有有效的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
 });

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您不能,您可能想要使用swagger打开票证以启用异步验证。

答案 1 :(得分:1)

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

答案 2 :(得分: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;
      });    
 });