У меня ошибка в моей локальной стратегии паспорта, которая говорит, что пароль не определен - PullRequest
0 голосов
/ 03 декабря 2018

Я пытался преобразовать свой код из обратного вызова в обещание.Но после получения моей локальной стратегии паспорта в обещании у меня появляется ошибка, которая говорит, что мой пароль не определен.Не могли бы вы заглянуть в мой код и определить, где я ошибся?

exports.newLocalStrategy=new localStrategy({
      usernameField: 'username',
      passwordField: 'password'
},(username,done)=>{
  User.findOne({username})
    .then(user =>{
      if(!user) return done(null, null, console.error('user or email incorrect'));
      return done(null, user);
    })
    .catch(err =>{
      return done(err, null);
  });
  comparePassword(password,user[0].password)
    .then(isMatch=>{
      if (isMatch) return (done, null);
  })
    .catch(err=>{
      console.error(err);
      return done(err, null);
    })
});
let comparePassword =new Promise((candidatePassword, hash, callback)=>{
  bcrypt.compare(candidatePassword, hash, (err, isMatch)=>{
    if (err) return callback(err);
    callback(null, isMatch);
    });
});

ошибка исходит от comparePassword(password,user[0].password) строка

1 Ответ

0 голосов
/ 03 декабря 2018

Вы используете findOne.Он просто вернет один объект документа, а не массив.

Так что вам не нужно user[0].password.

Вместо этого просто используйте user.password.

Кроме того, ваш comparePassword пароль должен быть выполнен после findOne.Вы должны поместить этот вызов в обратный вызов findOne, где вы написали return done(null, user);

Подробнее о findOne можно прочитать здесь

...