我正在尝试使用 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/