2013-12-12 94 views
0

我有一個工作節點應用程序,我需要根據用戶通過basicAuth連接到應用程序連接到不同的數據庫。NodeJS express 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存儲的用戶名來一些變種肯定不會工作,因爲可以有來自不同用戶的許多傳入連接,所以你不能保證其相同的用戶, 對?該信息是否可以以某種方式從請求標題中檢索?

回答

2

basicAuth() middleware將設置req.userreq.remoteUser一旦授權。

雖然,請注意,回調的第二個參數預計爲user,而不僅僅是authorized布爾值。但是,它可以是任何你想要的值,包括user的名稱。

callback(null, config.credentials.clients[user].password == pass ? user : null); 

之後,你應該能夠與檢索:

var authUser = req.user; 
+0

衛生署,我從字面上只是注意到我應該返回用戶名! :)'callback(null,config.credentials.clients [user] .password == pass?user:false)' –

+0

請問utils.pause的目的是什麼? –

+0

@KatyaS [它似乎是](https://github.com/senchalabs/connect/blob/2.12.0/lib/utils.js#L239-L266)向後兼容['readable.pause()' ](https://github.com/senchalabs/connect/blob/2.12.0/lib/utils.js#L239-L257),這可以防止'req'在等待時傳輸'data'(任何主體內容) '回調'。 –

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(); 
}); 
+0

已棄用?嗯,需要調查。謝謝您的回答! –

+0

@KatyaS它已被棄用,但顯然不計劃被刪除。 [來源](https://github.com/senchalabs/connect/blob/2.12.0/lib/middleware/basicAuth.js#L18-L20)。儘管如此,作者仍然建議使用['basic-auth'](https://npmjs.org/package/basic-auth)。 –

相關問題