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

时间:2013-05-14 03:22:24

标签: node.js passport.js

我正在使用本地护照在我的节点应用上提供本地身份验证。但是,我想将其更改为使用电子邮件地址而不是用户名进行身份验证。有没有办法做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:12)

您必须先使用{usernameField:'email'}将默认用户名字段更改为电子邮件,然后您可以根据电子邮件运行数据库搜索并检查密码:

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

答案 1 :(得分:4)

由于您必须自己实现验证(在LocalStrategy验证程序回调中),您可以将任何内容传递给它:

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

答案 2 :(得分:0)

您可以在数据库中查询来自请求参数的电子邮件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) {

            });
        }))