这就是我在数据库中哈希并存储我的密码的方式。
NEWUSER FUNCTION
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync(password, salt);
var query="INSERT into user(email,firstname,lastname,logintime,gender,password) VALUES('"+email+"','"+firstname+"','"+lastname+"','"+logintime+"','"+gender+"','"+hash+"')";
这是我检索和检查身份验证的方式
验证功能
var query = "SELECT password from user where email='" + email + "'";
connection.query(query,function(err,result){
if(err)
{
console.log("ERROR:"+err.message);
}
else
{
if(result.length!==0)
{
var hash=JSON.stringify(result[0].password); console.log(hash);
console.log(bcrypt.compareSync(password,hash ));
if(bcrypt.compareSync(password, hash)) { callback(err, result); }
这总是显示错误但如果我这样做它会显示预期结果
var hash = bcrypt.hashSync("sacjap", 8);
//var hash=JSON.stringify(result[0].password);
console.log(hash);
console.log(bcrypt.compareSync(password,hash ));
if(bcrypt.compareSync(password, hash))
{
callback(err, result);
}
所以问题是每当我从数据库中获取密码时它都无法正常工作。 PLZ帮助
答案 0 :(得分:0)
首先,我的回答是基于我在这里找到的文档: https://github.com/davidwood/node-password-hash
密码哈希模块似乎试图调用' split'对你提供给'验证'的第二个参数起作用。函数,假设它是一个字符串(JavaScript String split function on MDN)。我认为你应该检查一下你的结果类型'变量,它看起来像是数据库返回的更复杂的查询结果对象。您提供的代码并未向我提供有关您在此处使用的连接类型的更多信息,因此我无法给您更具体的答案。我的方法是找出如何从你的结果中获得一个简单的字符串'变量,然后表示您可以移交给'验证的散列密码。这只是一个疯狂的猜测,我希望这个小提示可以帮助您解决问题。
附注:您用于密码哈希的模块似乎已被弃用,也许您应该留意替代方案。