javascript - 你如何检测 typeorm 中的密码等属性是否已更改

标签 javascript node.js nestjs typeorm

在 typeorm 中,我尝试使用订户装饰器在持久保存到数据库之前对用户密码进行哈希处理。不幸的是,我在文档中找不到引用。

在sequelizejs中,我使用了下面的代码,

User.hashPassword = (user, options) => {
    if (!user.changed('password')) {
      return null;
    }
    // hash password
    return Bcrypt.hash(user.get('password'), SALT_ROUNDS)
      .then(hash => user.set('password', hash));
  };

现在,我正在尝试将代码迁移到typeorm,我的翻译大致是

@BeforeInsert()
@BeforeUpdate()
hashPassword() {
    // conditional to detect if password has changed goes here
    this.password = bcrypt.hashSync(this.password, SALT_ROUNDS);
}

问题是,我停留在 !user.changed('password')typeorm 中是否有等效函数可以在不推出我自己的解决方案的情况下执行此操作?

最佳答案

这个问题的解决方案是在@adetoola 自己的 issue 中找到的. 您可以使用@AfterLoad 加载用户密码并检查当前密码是否不同:

@Entity()
export class User extends BaseEntity {
    @PrimaryColumn()
    public username: string;

    @Column()
    public password: string;

    @Column({ nullable: true })
    public jwtToken: string;

    private tempPassword: string;


    @AfterLoad()
    private loadTempPassword(): void {
        this.tempPassword = this.password;
    }

    @BeforeUpdate()
    private encryptPassword(): void {
        if (this.tempPassword !== this.password) {
            //
        }
    }

关于javascript - 你如何检测 typeorm 中的密码等属性是否已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697680/

相关文章:

javascript - 脚本如何在页脚库 jquery 和 angularjs 中显示加载时间和内存使用情况网页

javascript - 达到限制后禁用复选框

javascript - 原型(prototype)和原型(prototype)之间的区别._

node.js - 什么时候应该将 cookie-parser 与 express-session 一起使用?

rest - 为什么我的上传文件 POST 不能使用 NEST.JS 和 Multer?

graphql - 找不到模块 'graphql/tsutils/Maybe' 或其对应的类型声明

node.js - 有没有办法将默认值设置为缺失/可选 JSON 属性?

javascript - 如何检查 char 在 JS 中是否可见?

node.js - PM2 不适用于 NodeJS (Heroku)

javascript - 固定导航栏顶部的自动完成列表