我正在尝试在用户模型中使用正则表达式来验证密码字段。但由于某种原因它不起作用。我检查了 sequelize 文档,它说验证应该在 create
、 update
和 save
上自动运行。 Link to Docs on validation.
我曾尝试使用 is
和自定义验证器 checkPassword
。两者都没有返回任何错误。有人可以解释一下我在这里做错了什么吗?
这是我的用户模型
import { CustomError } from '../../utils/error';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
'User',
{
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: {
allowNull: false,
unique: true,
type: DataTypes.STRING,
validate: {
isEmail: true
}
},
password: {
allowNull: false,
type: DataTypes.STRING,
validate: {
checkPassword(value) {
if (
!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,}$/.test(
value
)
) {
throw new CustomError(400, 'Provide a valid password!');
}
},
is: {
args: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,}$/,
msg:
'The password must contain atleast 8 characters including at least 1 uppercase, 1 lowercase and one digit.'
}
}
}
},
{}
);
User.associate = function(models) {
User.hasMany(models.Post, {
foreignKeyConstraint: true,
foreignKey: 'userId'
});
User.hasMany(models.Comment, {
foreignKey: 'userId',
foreignKeyConstraint: true
});
};
return User;
}
最佳答案
好吧,我想通了。验证不起作用的原因是因为我已经对密码进行了哈希处理,因此它通过了验证规则。现在我已经将验证移到我从用户那里获取密码的地方。
关于node.js - 使用正则表达式进行序列化验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58502043/