0

我在我的应用程序中使用了一个 basicAuth 中间件,它可以工作。

但是,在我的路由功能中,我想获取用户用来进行身份验证的登录名。假设 req 是我的请求变量,这应该在 req.remoteUser 中(后来在 req.user 中)。

但目前两者都设置为“真”。我在调用 app.use(app.router) 之前检查了是否使用了中间件,因此应该填充 req 请求!我还在 basicAuth 之后的行上使用了 bodyParser,它正确地填充了请求。

google 上没什么,只有 express github 上的一个问题说现在它可以工作并且 req.user 和 req.remoteUser 都有价值。

4

1 回答 1

0

如果我们想要设置 req.user,则需要将用户名提供给回调函数(即使调用代码显然在其上下文中有它)。

所以不要这样做(正如我遵循的伟大教程所说):

var express = require('express');
var app = express();

// Authenticator
app.use(express.basicAuth(function(user, pass, callback) {
 var result = (user === 'testUser' && pass === 'testPass');
 callback(null /* error */, result);
}));

app.get('/home', function(req, res) {
 res.send('Hello World');
});

app.listen(process.env.PORT || 8080);

必须将函数更改为:

app.use(express.basicAuth(function(user, pass, callback) {
  if (user === 'testUser' && pass === 'testPass') {
    callback(null /* error */, user);
  } else {
    callback(null, null);
  }
}));

对于那些想知道的人来说,是的,这意味着我们不能有一个名称是空字符串的用户(否则它将被 express 解释为 false),这似乎是一种耻辱。

于 2013-10-17T16:19:16.817 回答