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;
}
我使用带有 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;
}