对于使用Node.js的Passport-Local,是否可以使用电子邮件而不是用户名进行身份validation?

我正在使用passport-local在我的节点应用程序上提供本地身份validation。 不过,我想改变这个用电子邮件地址而不是用户名进行validation。 有没有办法做到这一点?

谢谢。

由于您必须自己实现validation(在LocalStrategyvalidation器callback中),您可以通过任何您喜欢的方式:

 passport.use(new LocalStrategy(function(email, password, done) { // search your database, or whatever, for the e-mail address // and check the password... }); 

您必须首先将默认的用户名字段更改为{usernameField:'email'}的电子邮件地址,然后才能运行基于电子邮件的数据库search并检查密码:

 passport.use(new LocalStrategy({ usernameField: 'email' }, function(email, password, done) { UserModel.findOne({ email: email }, function(err, user) { // Check password functionality }) }) 

您可以从请求参数中查询数据库中的email-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) { }); }))