如何使用 bcrypt return 散列密码?
How to return hashed password with bcrypt?
我正在使用 bcrypt 并且我正在尝试使用一个异步函数来散列密码并 returns 它但是因为它是异步的,除非我使用同步版本(我不想要即使它有效)它 returns [object Promise]
并且数据库将此保存:{} 作为密码。是的,两个括号。我确实使用了 await
但它不起作用,而且我对异步函数的理解很差。我在网上找不到任何答案,因为看起来我按照教程做的很好,但我显然不是。
代码如下所示:
function signup(){
var pass = "example";
pass = hashPassword(pass);
console.log(pass); // prints [object Promise] - It's printed first.
//write account with pass to database. Pass is saved as '{}'.
}
async function hashPassword(original_password){
const hashedPass = await bcrypt.hash(original_password, 10);
console.log(hashedPass) // prints the actual hashed pass - It's printed second
return hashedPass; //returns [object Promise]
}
那么我怎样才能获得 return 散列密码而不在异步中添加发送到数据库的代码?
bcrypt.hash 没有 return 承诺。
您可能需要将此函数调用包装到一个新的 promise 中
const hashedPass = await new Promise((resolve, reject) => {
bcrypt.hash(original_password, rounds, function(err, hash) {
if (err) reject(err)
resolve(hash)
});
当你调用一个 async
函数时,它会 return 一个 promise
,看看这个 .
为了获得您的哈希数据,您可以使用 .then
来解决您的承诺
hashPassword(pass).then(hash=>console.log(hash)).catch(err=>console.error(err))
或者您也可以使用 async/await
async function signup() {
try {
var pass = "example";
pass = await hashPassword(pass);
} catch (err) {
console.error(err);
}
}
我正在使用 bcrypt 并且我正在尝试使用一个异步函数来散列密码并 returns 它但是因为它是异步的,除非我使用同步版本(我不想要即使它有效)它 returns [object Promise]
并且数据库将此保存:{} 作为密码。是的,两个括号。我确实使用了 await
但它不起作用,而且我对异步函数的理解很差。我在网上找不到任何答案,因为看起来我按照教程做的很好,但我显然不是。
代码如下所示:
function signup(){
var pass = "example";
pass = hashPassword(pass);
console.log(pass); // prints [object Promise] - It's printed first.
//write account with pass to database. Pass is saved as '{}'.
}
async function hashPassword(original_password){
const hashedPass = await bcrypt.hash(original_password, 10);
console.log(hashedPass) // prints the actual hashed pass - It's printed second
return hashedPass; //returns [object Promise]
}
那么我怎样才能获得 return 散列密码而不在异步中添加发送到数据库的代码?
bcrypt.hash 没有 return 承诺。
您可能需要将此函数调用包装到一个新的 promise 中
const hashedPass = await new Promise((resolve, reject) => {
bcrypt.hash(original_password, rounds, function(err, hash) {
if (err) reject(err)
resolve(hash)
});
当你调用一个 async
函数时,它会 return 一个 promise
,看看这个
为了获得您的哈希数据,您可以使用 .then
来解决您的承诺
hashPassword(pass).then(hash=>console.log(hash)).catch(err=>console.error(err))
或者您也可以使用 async/await
async function signup() {
try {
var pass = "example";
pass = await hashPassword(pass);
} catch (err) {
console.error(err);
}
}