这里我使用bcryptjs库加密我的密码,当我插入db时它工作正常,但每次比较我在DB中插入的相同密码时返回false。这是我的代码..请告诉我我错在哪里。
此代码用于在DB中插入哈希密码,它完美无缺
bcrypt.hash(insertData.Password, 10, function(err, hash) {
// Store hash in your password DB.
console.log('hash' , hash)
insertData.Password = hash;
insertIntoDB(table,insertData,function(result){
if(result && result.length > 0){
res.json({
"status":"1",
"result":result[0]._id
});
}
});
});
以下是比较密码的代码,但它总是返回false。
var actualPass = results[0].Password //Store in DB password
bcrypt.hash(UserInputPassword, 10, function(err, hash) {
console.log('hash' , hash)
bcrypt.compare(actualPass, hash, function(err, response) {
if(err){
console.log("err",err)
}else{
console.log("response",response)
}
});
});
答案 0 :(得分:10)
当您compare()
时,您需要将明文值作为第一个参数传递,将数据库中的哈希作为第二个参数传递。例如:
var hashFromDB = '$2a$10$foo';
var plainPassFromUser = 'mypassword';
bcrypt.compare(plainPassFromUser, hashFromDB, function(err, matches) {
if (err)
console.log('Error while checking password');
else if (matches)
console.log('The password matches!');
else
console.log('The password does NOT match!');
});
bcrypt.hash()
之前,您也不需要compare()
次。{{1}}。当你插入数据库时只需一次。