当“ usernameField”设置为“ email”时,Passport返回“未提供用户名”

时间:2018-09-13 13:18:19

标签: express authentication mongoose passport.js

我正在尝试使用Express应用程序中的passport-local-mongoose进行用户身份验证,但是我想使用电子邮件而不是用户名,因此在进行一些研究后,我发现护照可以通过执行以下操作来做到这一点:

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
  },  
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect email.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));
passport.use(LocalStrategy);
User.authenticate();
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

但是我仍然收到“未提供用户名”错误,并且不会将用户保存到数据库中。

1 个答案:

答案 0 :(得分:0)

已解决

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
  },  
  User.authenticate()
));