2013-10-17 78 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),這似乎是一個恥辱。

相關問題