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));
}
}