2013-10-17 49 views
0

我在我的应用中使用了basicAuth中间件,它可以工作。如何使用express.js获取remoteUser请求

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

但是目前都设置为'true'。我在调用app.use(app.router)之前检查中间件是否被使用,所以请求应该被填充!我也在basicAuth后面的一行中使用了bodyParser,并且它正确地填充了请求。

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

+0

如果我没有弄错,这是异步版本的验证检查(同步版本工作)中的错误。有关更多详细信息,请参阅https://github.com/visionmedia/express/issues/1782。 – Sebastien

+0

这不是一个错误,[这是一个功能](https://github.com/visionmedia/express/issues/1782#issuecomment-26525086);) – robertklep

回答

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); 
    } 
})); 

而对于那些想知道,是的,这意味着我们可以没有一个用户的名字是空字符串(否则它将被解释为false),这似乎是一个耻辱。

相关问题