带有 HTTP-AUTH 的 node.js Express

Posted

技术标签:

【中文标题】带有 HTTP-AUTH 的 node.js Express【英文标题】:node.js Express with HTTP-AUTH 【发布时间】:2013-03-13 12:49:22 【问题描述】:

我在使用 http-auth 模块创建基于 express 的 node.js 应用程序时遇到问题。

可以为这个 http-auth 库创建中间件我有这个代码:

    //Configure Middlewares
logger.configure(function() 

  //All output has content type json
  logger.use(function(req, res, next) 
    res.contentType('application/json');
    next();
  );

  //Create digest auth middleware
  logger.use(function(req, res, next)
    digest.apply();
    next();
  );
);

应用此功能后,当我连接到站点时出现此错误:

TypeError: Cannot read property 'headers' of undefined

有没有办法解决这个问题或使用其他方法?

我需要对整个应用程序进行摘要身份验证。

【问题讨论】:

logger 是 express 应用的实例。 只需使用适当的模式将http-authconnect 集成。 【参考方案1】:

我认为 apply() 期待请求对象(因此它无法读取标头);

试试这个语法:

digest.apply(req, res, function(username) 

);   

【讨论】:

这可能有效,但是当我想去任何路线时,我的回复都是空的。 apply 函数是异步的,因此您可能必须在apply 回调中调用next()。当然,你所描述的可能是无关的。 此答案对http-auth 模块不再有效。【参考方案2】:

你应该把它和correct pattern一起使用:

// Authentication module.
var auth = require('http-auth');
var digest = auth.digest(
  realm: "Simon Area.",
  file: __dirname + "/../data/users.htdigest"
);

// Configure Middlewares
logger.configure(function() 
  // Create digest auth middleware
  logger.use(auth.connect(digest));

  // All output has content type json.
  logger.use(function(req, res, next) 
    res.contentType('application/json');
    next();
  );    
);

【讨论】:

以上是关于带有 HTTP-AUTH 的 node.js Express的主要内容,如果未能解决你的问题,请参考以下文章

Node.js中的express框架获取http参数

Node.js express获取参数有三种方法

Node.js教程

使用带有 Javascript 的 MySQL (node.js)

带有 Express 异步 API 调用的 Node.JS

Node.js 永远带有环境变量