gpt4 book ai didi

sequelize.js - 创建和更新时的哈希密码

转载 作者:行者123 更新时间:2023-12-03 22:15:50 25 4
gpt4 key购买 nike

我正在尝试在创建记录和用户更新密码时为用户哈希密码。在创作时,我可以做类似的事情

User.beforeCreate((user, options) => {
user.password = encryptPassword(user.password)
})

这将很容易执行并散列新用户的密码。但是我在更新密码时遇到了问题。如果我只是这样做
User.beforeUpdate((user, options) => {
user.password = encryptPassword(user.password)
})

然后每次用户更新他们的记录(即更新名称、地址等)时,它都会触发钩子(Hook)并重新散列密码。

如何知道密码何时更改以便触发 Hook ?另外,我怎样才能使用 beforeSave,而不是使用这 2 个钩子(Hook)?达到同样的效果?

更新

根据要求,我的用户定义很简单
sequelize.define(
'user',
{
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
},
emailAddress: {
field: 'email_address',
type: Sequelize.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: {
args: true,
msg: "Email is not valid"
}
},
},
password: {
type: Sequelize.STRING,
allowNull: false,
validate: {
min: {
args: 6,
msg: "Password must be more than 6 characters"
}
}
}
}
)

最佳答案

嘿,让我试一试

所以首先你可以为两个钩子(Hook)运行相同的函数,如下所示:

function encryptPasswordIfChanged(user, options) {
if (user.changed('password')) {
encryptPassword(user.get('password'));
}
}

User.beforeCreate(encryptPasswordIfChanged);
User.beforeUpdate(encryptPasswordIfChanged);

当您想在更新中更改密码并创建 API 端点时,只需调用 user.set('password', somePasswordString); .我不确定这是否正是您所需要的,但我认为这种模式应该满足您的需求。 .changed函数应该返回 true当您创建用户时,因为 _previousDataValues密码应为 undefined .

祝你好运 :)

关于sequelize.js - 创建和更新时的哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com