【问题标题】:Passport local mongoose: no username was given error护照本地猫鼬:没有给出用户名错误
【发布时间】:2020-01-02 21:02:05
【问题描述】:

在我的前端登录表单上,我只有输入字段 emailpassword。 Passport local 需要 usernameField 名称并抛出 [MissingUsernameError: No username was given]。有没有办法让本地护照不期待usernameField

【问题讨论】:

  • 是的。您是否使用电子邮件代替用户名?
  • 是的,改用电子邮件。

标签: mongoose mongoose-schema


【解决方案1】:

如果您想使用电子邮件地址而不是用户名,那么您需要告诉护照。为此,请查看以下代码 sn-p:

passport.use(new LocalStrategy({
            usernameField: 'email', // this is where you do that
            passwordField: 'password'
        },
       (email, password, done) => {
            User.findOne({
                email: email
            }, (error, user) => {
                if (error) {
                    return done(error);
                }
                if (!user) {
                    return done(null, false, {
                        message: 'Username or password incorrect'
                    });
                }


                // Do other validation/check if any

                return done(null, user);
            });
        }
    ));

【讨论】:

  • 知道了。还需要修改 var newUser = new User({username: req.body.email....});在注册后的路线中。非常感谢!
【解决方案2】:

添加答案,如果您不需要自定义用户身份验证方法,您可以简单地使用来自 passport-local-mongoose 的 User.authenticate() 方法。下面的实现将允许在登录时以 name="email" 作为用户名从表单输入字段中读取值。

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

您的用户架构仍应使用名为“用户名”和“密码”的键,否则将返回错误。

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');

var userSchema = new mongoose.Schema({
    username: String,
    password: String
});

// Add methods from passport-local-mongoose (authenticate, register etc)
userSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model('User', userSchema);

创建用户并将其保存到数据库时,将 req.body.email 分配给用户名

app.post('/register', (req, res) => {
    User.register(
    new User({
        username: req.body.email,
        }),
    req.body.password,
    (err, user) => {
        ...
    }
    )
}

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 2017-04-02
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2018-07-31
    • 2017-06-30
    相关资源
    最近更新 更多