我有一个工作节点应用程序,我需要根据用户通过basicAuth连接到应用程序连接到不同的数据库。
以下是一个示例:
// Authenticating function
var sgAuth = express.basicAuth(function(user, pass, callback){
if(config.credentials.clients[user] === undefined) {
callback(null, false);
} else {
callback(null, config.credentials.clients[user].password == pass);
}
});
// This function needs to know what user has authenticated
function putEvents(req, res) {
//How do I know what user authenticated in this request?
var authUser = ???;
var table = getUserTable(authUser);
...
}
app.post('/put', sgAuth, putEvents);
将sgAuth中的用户名存储到某些var肯定不会起作用,因为来自不同用户的传入连接可能很多,所以你不能保证它是同一个用户,对吧?可以以某种方式从请求标题中检索此信息吗?
答案 0 :(得分:2)
一旦授权,basicAuth()
middleware将设置req.user
和req.remoteUser
。
但请注意,回调的第二个参数应该是user
,而不仅仅是authorized
布尔值。但是,它可以是您想要的任何 truthy 值,包括user
名称。
callback(null, config.credentials.clients[user].password == pass ? user : null);
之后,您应该可以使用以下方法检索它:
var authUser = req.user;
答案 1 :(得分:0)
请注意:不推荐使用basicAuth
这里是代码:
app.use(express.basicAuth(function(user, pass, callback){
if(config.credentials.clients[user] === undefined) {
callback('user not found!!!');
} else {
if(config.credentials.clients[user].password === pass) {
callback(null, config.credentials.clients[user]);
} else {
callback('wrong pass!!!');
}
}
});
app.post('/put', function putEvents(req, res) {
console.log(req.user.name)
res.end();
});