Javascript 使用len和setter进行Sequelize密码验证失败

Javascript 使用len和setter进行Sequelize密码验证失败,javascript,mysql,node.js,validation,sequelize.js,Javascript,Mysql,Node.js,Validation,Sequelize.js,我设置了密码字段,如下所示: 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
处理程序以将密码转换为
md5
哈希时,验证总是失败(它以我上面设置的消息结束):

在我看来,
len
set
似乎彼此不喜欢,但我不明白为什么


如何解决这个问题?

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

set(值){

如果(value.length>=8&&value.length)我还没有在node.js中使用过(我来自mysql标签),但是您应该使用md5以外的东西来进行散列(例如sha1)-特别是如果它不是咸的。不咸的md5哈希是不安全的,但咸的md5哈希生成速度非常快,因此有人试图闯入可以在短时间内尝试大量哈希。至于您的问题本身,是否可以输出新设置密码的长度(同样,我还没有在node.js中工作过)?@RobbieToyota这是一个很好的建议,与我的问题无关。我更新了标题。它与setter有关,而不是与
md5
有关。既然我同时使用了setter和validation,你能试着用长度大于7的随机字符串替换md5函数吗?如果你还没有这样做的话。@IonicăBiză你解决过这个问题吗?@bobăcobb No我记得我找到了另一个选择,但我不知道我最终是如何解决的。。。
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));
   }
}