我有一个使用passport的node.js登录系统,但是我正在尝试弄清楚如何使用用户名或电子邮件登录用户。我只能单独使用电子邮件或用户名登录用户。我不知道如何编写代码来满足他们的用户名和电子邮件。因此,如果用户想使用用户名登录,他们可以,如果希望使用电子邮件,则也可以。以下是我的users.js文件中的本地策略代码:
passport.use(new LocalStrategy(
function(email, password, done) {
User.getUserByEmail(email, function(err, user, next){
if(err) throw err;
if(!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 {
return done(null, false, {message: 'Invalid password'});
}
});
});
}));
这是我的user.js文件中的module.exports:
module.exports.getUserByEmail = function(email, callback){
var query = {email: email};
User.findOne(query, callback);
}
module.exports.getUserById = function(id, callback){
User.findById(id, callback);
}
module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
if(err) throw err;
callback(null, isMatch);
});
}
以上代码只允许用户使用电子邮件登录。我希望用户有机会使用他们的电子邮件或用户名进行登录。
getUserById
吗?检查一下。如果你之前的代码能够正常工作,那么这个也应该可以。这是你可以遵循的思路来实现你想要的。 - Ankit Agarwal