[英]Passport authenticate is always executing failureRedirect
我正在使用passport.js來為我的應用程序的node.js后端認證用戶。 以下代碼始終執行failureRedirect,但我無法找到原因。 沒有錯誤信息。
router.post('/login', passport.authenticate('local', {
failureRedirect: '/users/login',
failureFlash: 'Invalid email or password'
}), function(req, res) {
console.log('Authentication Successful');
req.flash('success', 'You are logged in ');
res.redirect('/');
});
我從護照網站復制了此代碼,這也無法正常工作:
router.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/users/login' }));
以下代碼甚至還沒有開始:
passport.use(new localStrategy({
email: 'email',
password: 'password'
}, function(email, password, done) {
User.getUserByEmail(email, function(err, user) {
if (err) throw err;
if (!user) {
console.log('Unknown User');
return done(null, false, {
message: 'Unknown User'
});
}
User.comparePassword(password, user.password, function(err, isMatch) {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
console.log('Invalid Password');
return done(null, false, {
message: 'Invalid Password'
});
}
});
});
}));
其余相關代碼:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
done(err, user);
});
});
module.exports.getUserByEmail = function(email, callback){
var query = {email: email};
User.findOne(query, function(err, user) {
callback(err, user);
});
}
module.exports.getUserById = function(id, callback){
User.findById(id, function(err, user) {
callback(err, user);
});
}
module.exports.comparePassword = function(userPassword, hash, callback){
console.log("pwd: " + userPassword + " hash: " + hash);
bcrypt.compare(userPassword, hash, function(err, isMatch) {
if(err) return callback(err);
callback(null, isMatch);
});
}
嘗試通過改變你的localStrategy配置這一項
express使用的默認登錄變量名稱為“用戶名”和“密碼”。 如果必須更改它們,因為在上述情況下為“ email”,則應按以下方式修改代碼:
passport.use(new localStrategy({usernameField: 'email'}, function(username, password, done){
User.getUserByEmail(username, function(err, user){
//rest of the code
如果沒有在用戶名字段中進行更改,則localStrategy會搜索“用戶名”,但找不到它,因此它將重定向。 現在,當usernameField更改時,它將找到“電子郵件”,並使用它代替username進行身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.