密码哈希methond使用“bcrypt”返回undefined

时间:2018-04-03 13:46:51

标签: javascript node.js typescript bcrypt

import bcrypt from 'bcrypt';

export default class Hash {
 static hashPassword (password: any): string {

   let hashed: string;

    bcrypt.hash(password, 10, function(err, hash) {
      if (err) console.log(err);
      else {
        hashed = hash;
      }

    });
    return hashed;
   }


}
  

此函数每次都返回undefined

1 个答案:

答案 0 :(得分:1)

当您return hashed时,哈希函数尚未完成。

您希望在回调函数本身内处理散列密码,或者像Aluan所指出的那样处理异步函数。

一种方法是使用承诺

export default class Hash {

    return new Promise((resolve, reject) => {
        static hashPassword (password: any): string {

       let hashed: string;

        bcrypt.hash(password, 10, function(err, hash) {
          if (err) reject(err);
          else {
            resolve(hash);
          }

        });
       }
    })

}

然后,当您想要调用哈希时,将其称为承诺

Hash.then(hashed => {
    console.log(hashed)
}).catch(err => {
    console.log(err)
})