我正在尝试使用npm软件包“ bcrypt”在我的PSQL数据库上注册并登录用户时插入加密密码。
我执行的操作:
1)注册:在我的PostgreSQL数据库中插入用户名和加密密码
createUser: function(username, password) {
bcrypt.genSalt(saltCount, function(err, salt) {
bcrypt.hash(password, salt, function(err, hash) {
query = "insert query with generated crypt password";
pool.query(query, (err, res) => {
console.log(err, res);
})
});
});
}
2)登录用户:获取插入的密码并与PostgreSQL数据库上的加密密码进行比较
login: function(username, password) {
const query = "select query for get crypt passowrd on db";
pool.query(query, (err, res) => {
const dbPsw = res.rows[0].hash_psw; // db password
bcrypt.compare(password, dbPsw, function(err, result) {
if (err)
console.log(err);
else if (result)
console.log("password match");
else
console.log("not match");
});
})
}
第二个函数的结果始终为“不匹配”。
我在PSQL数据库上看到,第一个函数插入的密码始终是不同的事件,我总是插入相同的密码进行加密。
所以我的问题是:如何获得始终相同的加密密码? 我可能做错了,但我遵循npm网站上的指南。
感谢您的帮助。
答案 0 :(得分:0)
query = "insert query with generated crypt password";
应为query = "insert query with generated hash
“,因为bcrypt.hash()
给出了一个散列,如方法参数所示:
function(err, hash)
,因此此回调会接收到错误或哈希值
关于bcrypt比较的工作原理,有一个有趣的question