javascript - bcrypt 上的 Promise { <pending> }

标签 javascript express bcrypt

我正在尝试使用 bcryptjs 验证用户的密码。我有这个返回 Promise 的函数,但是当我到达 bycrypt.hash 时,我得到的只是 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();
};

最佳答案

我喜欢使用 async-await 语法来处理 Promise。这样就不那么困惑了。并提供快速理解别人代码的能力。

您可以使您的函数成为异步函数。等待 bcrypt 完成其工作

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

但是 bcrypt 库提供了一个比较密码和哈希值的函数

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');
  }
};

关于javascript - bcrypt 上的 Promise { <pending> },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997071/

相关文章:

javascript - 在调用 combineReducers 时隐式实例化的函数类型中声明的类型参数缺少类型注释

node.js - mongoose.findOneAndUpdate() 更改保存在我的 Express 应用程序中的值

javascript - 多行字符串作为参数

Laravel 和 Meteor 密码哈希

node.js - 无法使用 bcrypt 登录用户(dyld : Symbol not found)

javascript - Backbone js 代码味道 - 嵌入 subview 的更好方法?

javascript - 用逻辑加载对象

javascript - 在 Materials-UI TextField 中显示多行错误

mysql - 从多个表中提取 Sequelize 信息

php - 验证失败,即使密码正确,使用 bcrypt 哈希方法