使用Sequelize和bcrypt async

时间:2017-02-04 06:26:01

标签: javascript node.js sequelize.js bcrypt

这可能是基于意见的。但是我想得到一些建议。

所以,我想做的事情可以用this thread中提到的方式完成。 但是this thread提出了我想要使用异步的原因。

这是我到目前为止所做的,并且有效。

User.create({email: req.body.email, password: req.body.password}).catch(function(err){
  console.log(err);
});

User.beforeCreate(function(user) {
  const password = user.password;
  user.password = '';
  bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
    if(err) console.error(err);
    bcrypt.hash(user.password, salt, null, function(err, hash) {
      if(err) console.error(err);
      user.password = hash;
      user.save();
    });
  });
});

由于我使用的是bcrypt异步,我必须将加密的密码保存在另一个查询中。我的直觉告诉我,使用secryize的bcrypt异步可能有更好的方法。

我的问题是,什么是首选/更好的方法?或者我应该同步使用bcrypt吗?

1 个答案:

答案 0 :(得分:3)

Async是一种方法,只需整理你的代码并在钩子中使用回调

function cryptPassword(password, callback) {
    bcrypt.genSalt(10, function(err, salt) { // Encrypt password using bycrpt module
        if (err)
            return callback(err);

        bcrypt.hash(password, salt, function(err, hash) {
            return callback(err, hash);
        });
    });
}

User.beforeCreate(function(model, options, cb) {
  debug('Info: ' + 'Storing the password');    
  cryptPassword(user.password, function(err, hash) {
    if (err) return cb(err);
    debug('Info: ' + 'getting ' + hash);

    user.password = hash;
    return cb(null, options);
  });
});