Ошибка MissingUsernameError: имя пользователя не было указано — Не уверен, где я ошибаюсь

#node.js #passport-local

#node.js #паспорт-локальный

Вопрос:

Я использую Node.js с помощью Mongoose и Passport пытаюсь заставить пользователя сохранить в БД, но продолжаю сталкиваться с ошибкой, когда имя пользователя не было указано. Я могу сохранить его, просто используя using username и password, но как только я пытаюсь добавить больше полей, я получаю проблему. Это код, который у меня есть:

app.js

 const userSchema = new mongoose.Schema ({    
  firstname: String,
  lastname: String,
  username: String,
  password: String,
  userLevel: {type: Number},
  profileImage: String,
  title: String
});

//ENABLE PASSPORT LOCAL
userSchema.plugin(passportLocalMongoose, {
  selectFields: ' firstname lastname username  password userLevel profileImage title'
});

//CREATE NEW model
const User = new mongoose.model("User", userSchema);

passport.use(User.createStrategy());

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.get('/control', (res, req) => {
  if (req.isAuthenticated()) {
    res.render('control');
  } else {
    res.redirect('/login')
  }
});

app.post("/register", (req, res) => {
  User.register(new User(
    {firstname: req.body.firstname},
    {lastname: req.body.lastname},
    {username:req.body.username},
    {userLevel: 1},
    {profileImage:"not set"},
    {title:"not set"}
  ),
  req.body.password,
  (err, user) => {
    if (err) {
      console.log(err);
      console.log(req.body.username);
    } else {
      passport.authenticate('local')(req, res, () =>{
        res.redirect('/control');
      });
    }
  });
});
  

Ответ №1:

Понял это! Я использовал отдельные объекты, а не только один объект :

 User.register((
    {firstname: req.body.firstname,
    lastname: req.body.lastname,
    username: req.body.username,
    userLevel: 1,
    profileImage:"not set",
    title:"not set"
  }),
    req.body.password,
    (err, user) => {
    if (err) {
      console.log(err);
      console.log(req.body.username);
    } else {
      passport.authenticate('local')(req, res, () =>{
        res.redirect('/control');
      });
    }
  });
});