Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从Node.js中的DB中获取哈希密码,以便bcrypt可以对其进行比较_Mysql_Node.js - Fatal编程技术网

Mysql 如何从Node.js中的DB中获取哈希密码,以便bcrypt可以对其进行比较

Mysql 如何从Node.js中的DB中获取哈希密码,以便bcrypt可以对其进行比较,mysql,node.js,Mysql,Node.js,我有一个注册页面,用户可以在上面向数据库发送请求。在发送请求之前,我使用salt+hash算法修改密码 DB中的示例: 用户名:aUser1234 密码:password12345 散列:$2b$13$dTbz4IeMdeXkqHwCL7Lzqe8NKNyKBvA2mQWk8gnPDLWc4O6hyvew2 我试图从我的数据库中获取散列密码,但我的代码有三个问题 一旦验证用户名存在,如何从数据库访问哈希密码? 然后如何使用wait bcrypt.comparepassword、hashedPas

我有一个注册页面,用户可以在上面向数据库发送请求。在发送请求之前,我使用salt+hash算法修改密码

DB中的示例:

用户名:aUser1234

密码:password12345

散列:$2b$13$dTbz4IeMdeXkqHwCL7Lzqe8NKNyKBvA2mQWk8gnPDLWc4O6hyvew2

我试图从我的数据库中获取散列密码,但我的代码有三个问题

一旦验证用户名存在,如何从数据库访问哈希密码? 然后如何使用wait bcrypt.comparepassword、hashedPassowrd;在getConnection.query中。。。 router.post回调函数也需要异步吗?
您需要从数据库中选择哈希密码进行比较

也许是这样的:

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;
    }
  });
});