我已經在我的Express/Mongoose網絡應用程序中成功實施了Passport-local,但是我很難弄清楚如何正確呈現失敗的登錄消息。如何使用Express和PassportJS正確報告無效登錄?
這裏是我的登錄路由:
app.get('/login', function(req, res) {
res.render('user/login', {
});
});
有了這樣的路線,我怎麼報告無效登錄?如果登錄成功,它會將id
/username
寫入req.user
對象,但這對"GET /login"
路由沒有幫助,因爲如果成功,您將被重定向到您要去的頁面。
這意味着req.user
將始終爲undefined
當您GET
登錄頁面。
我想寫出一條信息,說'喲,無效登錄!'當以下事情發生時:
- 該用戶不存在。
- 提供的密碼不匹配,但用戶存在。
我可能想根據發生的情況輸出不同的消息。
當我實現了LocalStrategy我用這個代碼:
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(email, password, fn) {
User.findOne({'login.email': email}, function(err, user) {
// Error was thrown.
if (err) {
return fn(err);
}
// User does not exist.
if (!user) {
return fn(null, false);
}
// Passwords do not match.
if (user.login.password != utility.encryptString(user.login.salt + password)) {
return fn(null, false);
}
// Everything is good.
return fn(null, user);
});
}
));
正如你可以看到有一些問題,但是這是PassportJS的作者是如何建立自己的應用程序。我們應該如何訪問該戰略的回報?
如果它引發錯誤,我應該怎麼稱呼才能訪問err
?
謝謝。
很好,自定義回調方法看起來像它會工作。謝謝。 這兩種替代解決方案如何做同樣的事情呢?您不會在POST請求上執行成功/失敗重定向示例嗎?這就是我在做的事。 而第二個替代方案只是強制登錄訪問頁面的標準方式?就像,這是你想放在你想控制訪問的頁面上(用戶配置文件等)。 我打算將您標記爲自定義回調的答案。 – AntelopeSalad 2012-03-14 11:44:17
我把你的問題說成是「我怎樣才能迴應認證成功或失敗?」,這三種方法是不同的。對於替代品,您只需將客戶端發送到不同的路由來處理響應......因爲我不知道您實施的具體情況,所以由您決定什麼是最好的。是的,選項3是爲需要認證的頁面強制執行認證的好方法。 – 2012-03-14 17:30:36