【问题标题】:Can't get the Hash password to save with bcrypt无法获取哈希密码以使用 bcrypt 保存
【发布时间】:2016-02-07 19:48:49
【问题描述】:

我正在尝试使用 sequelize、bcrypt 和 express 来保存散列密码。哈希确实会生成,但看起来 db 条目是在生成哈希值之前发生的。我是 NodeJS 的新手,所以我的知识还不是很好。

user.js

var bcrypt = require('bcrypt');

module.exports = function(sequelize, DataType){

  var User = sequelize.define('User', {
    name: DataType.STRING,
    localPassword: DataType.STRING,
    lastName: DataType.STRING,
    localEmail: DataType.STRING,
    cellNumber: DataType.INTEGER
  },
      {
        instanceMethods: {
          validPassword: function(password){
              return bcrypt.compareSync(password, this.password);
          }
        },
          classMethods: {
              generateHash: function (password) {
                  return bcrypt.hash(password, 8, function(err, hash){
                      if(err){
                          console.log('error'+err)
                      }else{
                          return hash;
                      }
                  });
              }
          }
      }

  );

    return User;
};

路由/index.js

router.post('/register', function(req, res){
  var name = req.body.name;
  var lastName = req.body.lastName;
  var email = req.body.email;
  var cellNumber = req.body.cellNumber;
  var password = model.User.generateHash(req.body.password);
  model.User.build({name: name, lastName: lastName, localEmail: email, cellNumber: cellNumber, localPassword: password}).save();

});

除散列密码外,所有值都保留在数据库中。任何帮助将不胜感激。

【问题讨论】:

标签: javascript node.js express sequelize.js bcrypt


【解决方案1】:

这里的问题是您使用异步 bcrypt.hashmodel.User.build 在 bcrypt 散列密码之前执行。您在这里有几个选择,您可以使用同步的bcrypt.hashSync; 或执行model.User.build 调用作为承诺

model.User.generateHash(req.body.password).then(function(data){
   ...
})

您可以为此使用bcrypt-then

npm install bcrypt-then

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2011-05-24
    • 2012-07-09
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多