提问者:小点点

节点bcrypt的比较始终返回false


我被难倒了,试图让我的密码成功地与bcrypt使用node进行比较。也许我错过了什么,但是在创建帐户时,我在signup方法中执行了以下操作(有些代码被缩写):

bcrypt.genSalt(10, function(err, salt) {
               if(err) {

               }
               bcrypt.hash(user.Password, salt, function(err, hash) {
                           console.log('hashing and saving');
                           db.query(db insert code, function (error, rows, fields) {
                                    if(error) {
                                    console.log(error);
                                    res.setHeader('500', { 'Content-Type': 'x-application/json'});
                                    res.send({UserId: 0, ErrorMessage: 'Something terrible happened.'});
                                    } else {
                                    console.log('User created : ' + rows.insertId);
                                    res.setHeader('200', { 'Content-Type': 'x-application/json'});
                                    res.send({UserId: rows.insertId});
                                    }
                                    });
                           });
               });

return next();

一切正常。我的数据库有加密密码。但当用户登录时,我无法从bcrypt获得成功的结果。比较:

db.query(get account code, function(error, rows, fields) {
         if(rows.length == 1) {
           bcrypt.compare(request.params.password, rows[0].Password, function(err,res) {
              if(err) { console.log(err.toString()); }
              if(res == true)
              {
                        response.setHeader('200', { 'Content-Type': 'x-application/json' });
                        response.send({result: true});
              } else {
                        response.setHeader('401', { 'Content-Type': 'x-application/json' });
                        console.log('invalid password');
                        response.send({result:false});
                     }
              });
         }
        });

return next();

而我总是以无效的密码结束。在与我从数据库中提取的密码进行比较之前,我是否需要获取明文密码并重新加密它?


共2个答案

匿名用户

您可以跳过执行bcrypt.gensalt而使用bcrypt.hash(密码,10,函数(err,hash){..});

我觉得你的比较功能不错。

这对我来说很管用:

var bcrypt = require('bcrypt');

bcrypt.hash('mypassword', 10, function(err, hash) {
    if (err) { throw (err); }

    bcrypt.compare('mypassword', hash, function(err, result) {
        if (err) { throw (err); }
        console.log(result);
    });
});

匿名用户

我不知道您是否有和我一样的问题,我有同样的问题,因为我的表有45个字符的长度,而我bcrypt比较如果哈希长度与60不同,它将返回false。只需增加表中字符的长度