创建记录和用户更新密码时,我试图为用户哈希密码。在创作时,我可以做类似的事情
User.beforeCreate((user, options) => {
user.password = encryptPassword(user.password)
})
Run Code Online (Sandbox Code Playgroud)
这将很容易执行,并为新用户哈希密码。但是更新密码时出现问题。如果我只是做
User.beforeUpdate((user, options) => {
user.password = encryptPassword(user.password)
})
Run Code Online (Sandbox Code Playgroud)
然后,每次用户更新其记录(即更新名称,地址等)时,都会触发该钩子并重新哈希该密码。
如何知道何时更改密码,以便触发挂钩?另外,除了拥有这两个钩子之外,我如何才能使用它beforeSave来获得相同的结果?
更新
根据要求,我的用户定义非常简单
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"
}
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
嘿,让我试一下
因此,首先,您可以对两个钩子运行相同的功能,如下所示:
function encryptPasswordIfChanged(user, options) {
if (user.changed('password')) {
encryptPassword(user.get('password'));
}
}
User.beforeCreate(encryptPasswordIfChanged);
User.beforeUpdate(encryptPasswordIfChanged);
Run Code Online (Sandbox Code Playgroud)
当您想在更新中更改密码并创建API端点时,只需调用即可user.set('password', somePasswordString);。我不确定这是否正是您所需要的,但是我认为这种模式应该可以满足您的需求。创建用户时,该.changed函数应返回true,因为_previousDataValues密码应为undefined。
祝好运 :)
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |