TypeORM - 从不 return 获取用户时从数据库中获取密码

TypeORM - never return the password from the database when fetching a user

我使用带有 TypeORM 的 NestJs 创建了一个 REST API。基本上这是我的用户实体

@Entity('User')
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({ unique: true })
  public username: string;

  public passwordHash: string;
}

从数据库中获取用户时,敏感的密码信息也会 returned。但我只需要登录过程的密码字段。因此,在调用登录服务时,我将数据库用户的密码哈希与客户端提供的密码进行比较。我绝对不想 return 将密码信息返回给客户端。

由于您可以经常从数据库中获取用户图像,因此您必须经常从用户对象中删除密码信息。

假设您有一个组实体并且它们之间存在关系。在获取与组相关的用户时,您还必须注意组域中的敏感数据。

并且可能一些用户深深地嵌套在一个对象中 return 由一个大的 SQL 查询语句编辑。有什么方法可以 "hide" 某些字段吗?调用 this.usersRepository.find() 时,我会得到一个用户列表,每个用户都会有一个 id 和一个 username 字段 但没有 一个 passwordHash 场地。这会让事情变得更容易,因为我只需要在我的 signIn 流程中获取哈希字段。

只需将 select: false 选项添加到列定义中。有了它,除非通过 addSelect 明确添加,否则不会选择该列,请参阅 the docs

@Entity()
export class User {

    @Column({select: false})
    password: string;
}

您可以使用@Exclude,例如:

@Entity('User')
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({ unique: true })
  public username: string;

  @Exclude()
  @Column()
  password: string;
}