在 bcrypt 上承诺 { <pending> }
Promise { <pending> } on bcrypt
我正在尝试使用 bcryptjs 验证用户密码。我有这个 returns 一个 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();
};
bcrypt.hash
使用回调,而不是承诺(这就是 .then
所做的)
你应该像这样使用它:
bcrypt.hash(password, this.saltSecret, (err, hash) => {
...
});
这一行总是return一个承诺。
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();
});
我喜欢使用异步等待语法来处理承诺。它不那么混乱。并提供快速理解其他人代码的能力。
您可以将您的函数设为异步函数。等到 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');
}
};
我正在尝试使用 bcryptjs 验证用户密码。我有这个 returns 一个 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();
};
bcrypt.hash
使用回调,而不是承诺(这就是 .then
所做的)
你应该像这样使用它:
bcrypt.hash(password, this.saltSecret, (err, hash) => {
...
});
这一行总是return一个承诺。
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();
});
我喜欢使用异步等待语法来处理承诺。它不那么混乱。并提供快速理解其他人代码的能力。
您可以将您的函数设为异步函数。等到 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');
}
};