首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sequelize Typescript @BeforeUpdate Hook不工作

Sequelize Typescript @BeforeUpdate Hook不工作
EN

Stack Overflow用户
提问于 2019-11-29 08:16:52
回答 1查看 3K关注 0票数 2

我正在为我的无服务器lambda功能使用后缀类型记录模块。用户模型有两个挂钩,即前置和更新前。用户模型如下所示:

代码语言:javascript
运行
复制
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钩子不起作用。

我甚至试着把这两个钩子分开,并赋予它们自己的功能:

代码语言:javascript
运行
复制
@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);
    }
}

但是以前的更新仍然不起作用。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 16:52:57

我想你得加上

individualHooks:真

在这样的更新查询中- users.update(data,{where:{id},individualHooks: true});

然后,您可以像下面的user.dataValues那样将数据访问到@BeforeUpdate钩子中。

为了前夫。

代码语言:javascript
运行
复制
@BeforeUpdate
static hashPasswordBeforeUpdate(user: User) {
        user.dataValues.password = bcrypt.hashSync(user.dataValues.password, salt);
}

这种方法对我来说很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59101079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档