Mysql 如何从Node.js中的DB中获取哈希密码,以便bcrypt可以对其进行比较
我有一个注册页面,用户可以在上面向数据库发送请求。在发送请求之前,我使用salt+hash算法修改密码 DB中的示例: 用户名:aUser1234 密码:password12345 散列:$2b$13$dTbz4IeMdeXkqHwCL7Lzqe8NKNyKBvA2mQWk8gnPDLWc4O6hyvew2 我试图从我的数据库中获取散列密码,但我的代码有三个问题 一旦验证用户名存在,如何从数据库访问哈希密码? 然后如何使用wait bcrypt.comparepassword、hashedPassowrd;在getConnection.query中。。。 router.post回调函数也需要异步吗?Mysql 如何从Node.js中的DB中获取哈希密码,以便bcrypt可以对其进行比较,mysql,node.js,Mysql,Node.js,我有一个注册页面,用户可以在上面向数据库发送请求。在发送请求之前,我使用salt+hash算法修改密码 DB中的示例: 用户名:aUser1234 密码:password12345 散列:$2b$13$dTbz4IeMdeXkqHwCL7Lzqe8NKNyKBvA2mQWk8gnPDLWc4O6hyvew2 我试图从我的数据库中获取散列密码,但我的代码有三个问题 一旦验证用户名存在,如何从数据库访问哈希密码? 然后如何使用wait bcrypt.comparepassword、hashedPas
您需要从数据库中选择哈希密码进行比较 也许是这样的:
router.post("/user_login", (req, res) => {
const username = req.body.thisUsername; //aUser1234
const password = req.body.thisPassword; //password12345
const sqlString = "SELECT hashed_password FROM student_demographics WHERE username = ? LIMIT 1";
getConnection().query(sqlString, [username], async (err, results, fields) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
if (!results.length) {
console.log(" > The username is invalid :(");
res.redirect("/login.html");
res.end();
return;
}
const [hashedPassword] = results[0];
const isValid = await bcrypt.compare(password, hashedPassword);
if (isValid) {
//PASSWORD MATCHED
res.redirect("/homePage.html");
res.end();
} else {
console.log(" > The password is invalid :(");
res.redirect("/login.html");
res.end();
return;
}
});
});
请注意,您没有对登录信息执行任何操作,不过您可能希望将其保存在会话或cookie中。将立即尝试,并告知您是否适合我。我也知道这次会议,并计划很快完成这项工作。谢谢你的回复。请继续关注:像我这样的书确实会得到一些数据,但不包括密码。我尝试了console.logresults,结果如下:[RowDataPacket{username:'aUser1234'}]。结果[0]还将返回[RowDataPacket{username:'aUser1234'}]您是否更改了查询以从数据库中选择密码?我不是第一次,但现在已经尝试过了,在比较中传递结果[0]时出错,因为它不是字符串类型。这为我解决了问题const isValid=wait bcrypt.comparepassword,results[0].password;。非常感谢@AKX,你是最棒的:D
router.post("/user_login", (req, res) => {
const username = req.body.thisUsername; //aUser1234
const password = req.body.thisPassword; //password12345
const sqlString = "SELECT hashed_password FROM student_demographics WHERE username = ? LIMIT 1";
getConnection().query(sqlString, [username], async (err, results, fields) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
if (!results.length) {
console.log(" > The username is invalid :(");
res.redirect("/login.html");
res.end();
return;
}
const [hashedPassword] = results[0];
const isValid = await bcrypt.compare(password, hashedPassword);
if (isValid) {
//PASSWORD MATCHED
res.redirect("/homePage.html");
res.end();
} else {
console.log(" > The password is invalid :(");
res.redirect("/login.html");
res.end();
return;
}
});
});