javascript - 使用 len 和 setter 续写密码验证失败

标签 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 不喜欢彼此,但我不明白为什么。

如何解决这个问题?

最佳答案

我也遇到了同样的问题,我最终在 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!');
  }
}
这对我的目的有效。

关于javascript - 使用 len 和 setter 续写密码验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044386/

相关文章:

mysql - 使用 mysql 进行 MAX 和 CONVERT

php - 我如何获取一个包含 sql 查询的 php 变量,并使用 $db->updatePhoneNumbers() 将其添加到现有的 sql 查询中?

node.js - 以编程方式将 webfont 拆分为多个 unicode 范围

Node.js 异步并行 - 后果是什么?

javascript - MongoDB-Native NodeJS更新失败

javascript - 如何处理原型(prototype)上的 "left"和 "right"键?

javascript - 如何防止使用 jQuery 卸载页面?

javascript - 增加mailto :的IE URL长度限制

MYSQL - 从大表的第二行中选择数据

mysql - 使用 NodeJs 和 Handlebars 对表格的 <th> 标签进行水平排序