Ste*_*hen 6 javascript authentication node.js passport.js
我有一个带护照的 node.js 登录系统,但我想弄清楚如何使用用户名或电子邮件登录用户。我只能使用电子邮件或用户名单独登录用户。我不知道如何编写代码来满足他们的用户名和电子邮件。因此,如果用户想使用用户名登录,他们可以,或者如果希望使用他们的电子邮件,他们也可以。这是我的 users.js 文件中的 localstrategy 代码:
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'});
}
});
});
}));
Run Code Online (Sandbox Code Playgroud)
这是我的 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);
});
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只允许用户使用他们的电子邮件登录。我希望用户有机会使用他们的电子邮件或用户名登录。
您可以getUserById在 的回调内部使用getUserByEmail,以便两个查询都针对 或email运行username。如果您指定email,则将emailOrUserName获得该email值,然后User.getUserByEmail将返回用户,然后继续comparePassword。
如果您有username,则将emailOrUserName获得该username值,然后User.getUserByEmail不会返回用户,因此它会执行User.getUserById,如果在那里找到用户,则它将继续,User.comparePassword否则它将返回Unknown user
passport.use(new LocalStrategy(
function(emailOrUserName, password, done) {
User.getUserByEmail(emailOrUserName, function(err, user, next){
if(err) throw err;
if(!user){
User.getUserById(emailOrUserName, 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'});
}
});
});
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3961 次 |
| 最近记录: |