【问题标题】:How to get the remoteUser for a request with express.js如何使用 express.js 获取 remoteUser 的请求
【发布时间】:2013-10-26 04:22:10
【问题描述】:

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

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

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

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

【问题讨论】:

标签: node.js express


【解决方案1】:

如果我们想要设置 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),这似乎是一种耻辱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多