我正在使用 passport-local 在我的节点应用程序上提供本地身份验证。但是,我想将其更改为使用电子邮件地址而不是用户名进行身份验证。有没有办法做到这一点?
谢谢你。
我正在使用 passport-local 在我的节点应用程序上提供本地身份验证。但是,我想将其更改为使用电子邮件地址而不是用户名进行身份验证。有没有办法做到这一点?
谢谢你。
您必须首先使用 { usernameField: 'email' } 将默认用户名字段更改为电子邮件,然后您可以根据电子邮件运行数据库搜索并检查密码:
passport.use(new LocalStrategy({ usernameField: 'email' }, function(email, password, done) {
UserModel.findOne({ email: email }, function(err, user) {
// Check password functionality
})
})
由于您必须自己实现验证(在LocalStrategy
验证器回调中),您可以传递任何您喜欢的内容:
passport.use(new LocalStrategy(function(email, password, done) {
// search your database, or whatever, for the e-mail address
// and check the password...
});
您可以从请求参数中查询数据库的电子邮件 ID,如下所示:
passport.use('signup', new LocalStrategy({
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, username, password, done) {
//console.log(email);
console.log(req.param('email'));
findOrCreateUser = function(){
// find a user in Mongo with provided username
User.findOne({ 'email' : req.param('email') }, function(err, user) {
});
}))