【问题标题】:Passport returns "no username was given" when "usernameField" is set to "email"当“usernameField”设置为“email”时,Passport 返回“没有给出用户名”
【发布时间】:2019-02-18 05:49:45
【问题描述】:

我正在尝试在 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());

但我仍然收到“没有给出用户名”错误,它不会将用户保存到数据库中。

【问题讨论】:

  • 您是否在请求正文中以名为“电子邮件”和“密码”的参数发送凭据?
  • 是的,表单中的输入有“电子邮件”和“密码”的名称。

标签: express authentication mongoose passport.js


【解决方案1】:

通过使用解决

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

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2018-02-07
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 2019-10-29
    • 2021-04-08
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多