在 nodejs 中使用 bcrypt 登录

using bcrypt for login in nodejs

我很难通过集成 bcrypt 来确保我的登录系统安全。

我基本上得到了用户输入的用户名和密码,并尝试将其与我的数据库中的散列密码进行比较。这是我的。

const inputUsername = req.body.inputUsername;
const inputPassword = req.body.inputPassword;


var userLogin = "select * from login where USERNAME = ?"
ibmdb.open(ibmdbconnMaster, function(err, conn) {
        if (err) return console.log(err);
        conn.query(userLogin, [inputUsername], function(err, rows) {
            if (err) {
                console.log(err)
            }

            if (rows.length > 0) {
            var pass = ""
            for (var i = 0; i < rows.length; i++) { 
                pass = rows[i]['PASSWORD'];
                console.log(pass)

                bcrypt.compare(inputPassword, hash, function(err, result) {
                    if (pass == result) {
                     console.log("this works")
                     userAuth = true;
                     res.redirect('/index')
                    }
                 })
            }

            console.log("does not work")
            } else {
                userAuth = "false";
                res.render('login.ejs')
                alert('Incorrect username or password. Please try again')
            }

            conn.close(function() {
                console.log('closed the function /login');
            });
        })
    })

现在发生的是我收到错误 ReferenceError: hash is not defined 不知道如何解决这个问题。提前致谢

你在哪里定义了hash?我在你的代码中没有看到它。

这是我在 bcrypt/node/express 中使用的身份验证路由示例:

const Users = require("../users/users-model.js");

router.post("/register", (req, res) => {
  // Pull the user's credentials from the body of the request.
  const user = req.body;

  // Hash the user's password, and set the hashed password as the
  // user's password in the request.
  const hash = bcrypt.hashSync(user.password, 10);
  user.password = hash;

  Users.add(user)
    .then((newUser) => {
      const token = generateToken(newUser);
      res
        .status(201)
        .json({ created_user: newUser, token: token, user_id: newUser.id });
    })
    .catch((err) => {
      res.status(500).json({
        message: "There was an error adding a user to the database",
        err,
      });
    });
});

router.post("/login", (req, res) => {
  const { username, password } = req.body;

  Users.findBy({ username })
    .first()
    .then((user) => {
      if (user && bcrypt.compareSync(password, user.password)) {
        const token = generateToken(user);
        res
          .status(200)
          .json({
            username: user.username,
            first_name: user.first_name,
            last_name: user.last_name,
            email: user.email,
            token: token,
            user_id: user.id,
          });
      } else {
        res.status(401).json({ message: "Invalid Credentials" });
      }
    })
    .catch((err) => {
      res.status(500).json(err);
    });
});

function generateToken(user) {
  const payload = {
    userid: user.id,
    username: user.username,
  };
  const options = {
    expiresIn: "1h",
  };
  const token = jwt.sign(payload, secrets.jwtSecret, options);

  return token;
}

module.exports = router;