我有一个简单的用户模型如下:
'use strict';
let hashPassword = (user, options) => {
if (!user.changed('password')) { return; }
return require('bcrypt')
.hash(user.getDataValue('password'), 10)
.then(hash => user.setDataValue('password', hash));
};
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: {allowNull: false, type: DataTypes.STRING, unique: true},
email: {allowNull: false, type: DataTypes.STRING, unique: true},
password: {allowNull: false, type: DataTypes.STRING, unique: false},
}, {
hooks: {
beforeCreate: hashPassword,
beforeUpdate: hashPassword
}
});
return User;
};它在创建用户时运行得很好,但是beforeUpdate钩子似乎无法工作或被调用,并且密码保存在数据库中的纯文本中。
,它是从哪里来的,如何修复?
发布于 2017-10-20 09:17:42
如何更新用户?获取用户实例与更新实例与通过查询模型进行更新是有区别的。前者是一个实例更新,后者是一个大容量更新操作(即使您的where过滤器将返回一个条目)。
这种区别很重要,因为beforeUpdate是一个实例钩,因此它只会在实例更新时触发。您可以更改更新用户的方式,也可以实现beforeBulkUpdate挂钩。
发布于 2020-06-07 17:47:03
提供一个替代恩格卢克斯溢出的答案。还可以添加该选项。
{ individualHooks: true }注意:默认情况下,像bulkCreate这样的方法不会发出单个钩子--只有大容量钩子。但是,如果希望同时发出单个钩子,则可以将{ individualHooks: true }选项传递给查询调用。但是,这可能会极大地影响性能,这取决于所涉及的记录数量(因为,除其他外,所有实例都将加载到内存中)。
https://stackoverflow.com/questions/46758407
复制相似问题