TypeORM - 获取用户时从不从数据库返回密码

Que*_*n3r 9 javascript node.js typescript typeorm nestjs

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

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

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

  public passwordHash: string;
}
Run Code Online (Sandbox Code Playgroud)

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

由于您可以想象从数据库中获取用户的情况经常发生,因此您必须经常从用户对象中删除密码信息。

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

也许一些用户深深地嵌套在一个大 SQL 查询语句返回的对象中。有没有办法可以“隐藏”某些字段?打电话时,this.usersRepository.find()我会得到一个用户列表,每个用户都有一个id和一个username字段,但没有一个passwordHash字段。这会让事情变得更容易,因为我只需要在我的signIn流中获取哈希字段。

Kim*_*ern 20

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

@Entity()
export class User {

    @Column({select: false})
    password: string;
}
Run Code Online (Sandbox Code Playgroud)