使用len和setter的sequelize密码验证失败

时间:2017-07-11 21:01:00

标签: javascript mysql node.js validation sequelize.js

我设置了password字段,如下所示:

password: {
   type: Sequelize.STRING,
   validate: {
      len: { 
         args: [7, 42],
         msg: "The password length should be between 7 and 42 characters."
      }
   }
}

这很有效。但是,当我添加set处理程序时,要将密码转换为md5哈希,验证将始终失败(它以我在上面设置的消息结束):

password: {
   type: Sequelize.STRING,
   validate: {
      len: { 
         args: [7, 42],
         msg: "The password length should be between 7 and 42 characters."
      }
   },
   set (pass, key) {
      // `key` is "password" here
      this.setDataValue(key, md5(pass));
   }
}

在我看来,lenset彼此不喜欢,但我不明白为什么。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,我最终在 setter 函数中创建了一个验证:

set(value) {
  if (value.length >= 8 && value.length <= 20) {
    this.setDataValue('password', bcrypt.hashSync(value, 10));
  } else {
    throw new Error('Your password should be between 8-20 characters!');
  }
}

这对我有用。