NodeJS express basicAuth - 如何将用户名传递给路由功能?

时间:2013-12-12 15:03:31

标签: node.js express basic-authentication

我有一个工作节点应用程序,我需要根据用户通过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肯定不会起作用,因为来自不同用户的传入连接可能很多,所以你不能保证它是同一个用户,对吧?可以以某种方式从请求标题中检索此信息吗?

2 个答案:

答案 0 :(得分:2)

一旦授权,basicAuth() middleware将设置req.userreq.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();
});