我正在为我的无服务器lambda功能使用后缀类型记录模块。用户模型有两个挂钩,即前置和更新前。用户模型如下所示:
import { Table, Column, ForeignKey, BeforeCreate, BeforeUpdate, BelongsTo } from 'sequelize-typescript';
import { Role } from './role';
import bcrypt from 'bcrypt-nodejs';
import { BaseModel } from './base';
const saltRounds = 10;
@Table({
tableName: 'users'
})
export class User extends BaseModel {
@Column
firstName!: string;
@Column
lastName!: string;
@Column
password!: string;
@Column
email!: string;
@Column
isActive!: boolean;
@Column
companyId: string
@ForeignKey(() => Role)
@Column
roleId!: string;
@BelongsTo(() => Role)
role!: Role;
@BeforeCreate
@BeforeUpdate
static hashPassword(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}
}现在,当我创建一个新用户时,模型会散列密码并将散列密码保存在表中,但是当我试图更新用户的密码时,密码将以纯文本形式保存。因此,我猜测@BeforeCreate有效,而@BeforeUpdate钩子不起作用。
我甚至试着把这两个钩子分开,并赋予它们自己的功能:
@BeforeCreate
static hashPasswordBeforeCreate(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}
@BeforeUpdate
static hashPasswordBeforeUpdate(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}但是以前的更新仍然不起作用。我做错了什么?
发布于 2020-11-30 16:52:57
我想你得加上
individualHooks:真
在这样的更新查询中- users.update(data,{where:{id},individualHooks: true});
然后,您可以像下面的user.dataValues那样将数据访问到@BeforeUpdate钩子中。
为了前夫。
@BeforeUpdate
static hashPasswordBeforeUpdate(user: User) {
user.dataValues.password = bcrypt.hashSync(user.dataValues.password, salt);
}这种方法对我来说很好。
https://stackoverflow.com/questions/59101079
复制相似问题