Обещание {<pending>} на bcrypt - PullRequest
       53

Обещание {<pending>} на bcrypt

0 голосов
/ 31 января 2020

Я пытаюсь подтвердить пароль пользователя с помощью bcrypt js. У меня есть эта функция, которая возвращает Обещание, однако, когда я добираюсь до bycrypt.ha sh, все, что я получаю, это Promise { <pending> } Поэтому .then () не будет выполняться для неопределенного. Пожалуйста, помогите, я застрял на этом некоторое время

userSchema.methods.verifyPassword = function (password, err, next) {
  const saltSecret = this.saltSecret;
  const a = async function(resolve, reject) {
    console.log('hi4')
    console.log('this.saltSecret2', saltSecret);
    console.log(password);

    const hashed_pass = await bcrypt.hash(password, saltSecret);
    console.log('hash', hashed_pass);
    const valid = await bcrypt.compare(password, hashed_pass);
    if(valid){
      console.log('GOOD');
    }
  };
  a();
};

Ответы [ 3 ]

1 голос
/ 31 января 2020

Эта строка всегда возвращает Обещание.

console.log(bcrypt.hash(password, this.saltSecret));

Вы всегда можете сделать что-то подобное.

return new Promise(async (resolve, reject) => {
    const hash = await bcrypt.hash(password, this.saltSecret);

    if (hash == this.password) {
        return resolve(true);
    }

    return reject();
});
1 голос
/ 31 января 2020

Мне нравится использовать синтаксис asyn c -aait для обработки обещаний. Это менее запутанно. и дает возможность быстро понять чужой код.

Вы можете сделать свою функцию асинхронной c. дождитесь пока bcrypt выполнит свою работу

const password = await bcrypt.hash(password, saltSecret);

Однако библиотека bcrypt предоставляет функцию для сравнения пароля и га sh

const valid = await bcrypt.compare(password, hashed_pass);

попробуйте это

async function(resolve, reject) {
  console.log('hi4')
  console.log(this.saltSecret);
  console.log(password);

  const hashed_pass = await bcrypt.hash(password, saltSecret);
  console.log('hash', hashed_pass);
  const valid = await bcrypt.compare(password, hashed_pass);
  if(valid){
    console.log('GOOD');
  }
};
0 голосов
/ 31 января 2020

bcrypt.hash использует обратный вызов, а не обещание (это то, что делает .then)

Вы должны использовать его следующим образом:

bcrypt.hash(password, this.saltSecret, (err, hash) => {
    ...
});
...