问题描述
我正在为 React 应用创建一个帐户注册系统。我在尝试使用 Bcrypt
散列密码时遇到问题。我用来散列密码的函数在这里:
async function genPassword(password) {
let hashpass = bcrypt.hash(String(password),9)
return hashpass
}
const sql = "INSERT INTO USER (userFName,UserLName,userPhone,IsDelete,userEmail,userPassword) VALUES (?,?,?);"
db.query(sql,[fname,lname,phone,email,String(genPassword(password))],(err,data,fields,) => {
//Code to follow omitted
我把它上传到我的数据库,但在 MysqL 工作台中得到了这个值作为密码:Screenshot
如您所见,我得到的是 [Object Promise]
而不是散列。同样,我得到 Promise { <pending> }
当我 console.log 这个。
谁能看到我在这里做错了什么?当我使用 bcrypt 在一个单独的文件中散列它时,这工作正常,所以我很困惑我在哪里犯了错误。
解决方法
也许你可以使用这个:
const generatePassword = async (password) => {
return await new Promise((res,rej) => {
// Your hash logic
bcrypt.hash(password,10,(err,hash) => {
if (err) rej(err);
res(hash);
});
});
};
调用时:
const password = await generatePassword('1234');
hash 方法返回一个 promise,所以
如果您不想更改代码,只需使用 async/await
或 then
来解析承诺值。