Node js bookshelf-modelBase,如何验证加密密码

时间:2017-07-11 19:15:58

标签: javascript node.js validation bookshelf.js

我正在使用bookshelf-modelBase来为用户类建模。

在将密码保存到数据库之前,我想要salt密码,但我也想验证其长度是否短于给定的限制。因此,在模型'initialize'中,我在'saving'事件中添加了一个监听器,以便在保存之前加密密码。我还添加了一个'validate'块来检查Joi的密码长度。

问题是,当密码已经被腌制并且已经超过限制时,bookshelf-modelBase添加的验证侦听器在我的侦听器之后被调用。我试图取消绑定验证侦听器,但它不起作用。它总是在我之后称它为一切。

在我当前的模型定义之下。

var User = modelBase.extend({
  tableName: 'users',

  initialize: function() {
    this.removeListener('saving', this.validateSave);
    this.on('saving', this.validateAndProcessPassword);
  },

  validate: {
    username: Joi.string().min(6).max(15),
    password: Joi.string().max(15)
  },

  validateAndProcessPassword: function(model, attrs, options) {

    this.validateSave(model, attrs, options);

    const salt = bcrypt.genSaltSync();

    var password = bcrypt.hashSync(this.get('password'), salt);

    this.set({password: password});
  }
});

上面的代码将调用validateSave两次。进入我的validateAndProcessPassword后一次。

那么,我如何对用户输入执行验证并仍保存盐渍密码?

0 个答案:

没有答案