如何正确比较数据库中的盐值/哈希值密码?

时间:2019-02-02 02:22:35

标签: node.js mongodb bcrypt

我以前看过这个问题,但是使用其他语言(C#和PHP),但是我正在使用Javascript。我将用户名和密码存储到我的数据库中,但是密码通过bcrypt散列。

我可以正确存储它,但是不能从数据库中提取它并进行正确比较。它总是在控制台上记录我的“密码不匹配”消息。

这是我的注册码,用于将用户名和密码存储到我的数据库中。

app.post('/register', function (req, res) {
  var usernameCollection = mongoDBDatabase.collection('accounts');
  username = req.body.username;
  bcrypt.hash(req.body.password, saltRounds, function (err, hash) {
    usernameCollection.insertOne({
      personId: req.body.username,
      username: req.body.username,
      password: hash
    }).then(function(data) {
    if (data) {
   //res.redirect('/' + username);
   //window.location.href = "/" + username;
    }
  });
 });
});

这是我的代码,在这里我在数据库中搜索用户名,并尝试将密码进行比较。

//login page: storing and comparing email and password,and     redirecting to home page after login
app.post('/login', function (req, res) {
  var usernameCollection = mongoDBDatabase.collection('accounts');
  var username = req.body.username;
  var enteredPassword = req.body.password;

  usernameCollection.findOne({
    $or:[
          { username: username}
        ]
    }).then(function(user){
      if (user) {
        console.log('That username was found in the database');

        bcrypt.compare(enteredPassword, user.password, function(err, result){
          if(result == true){
              console.log('Password matches!');
              res.redirect('/' + username);
         }
          else{
            console.log('Password did not match');
            res.redirect('/');
          }
        });
      }
      else{
        console.log('The username ' + username + ' was NOT found in the database');
      }
    });
});

我只想将存储的密码与输入的密码进行比较,并确认它们相同以登录用户。

0 个答案:

没有答案