是否可以在响应主体上使用带有白名单的 ValidationPipe?
Is it possible to use the ValidationPipe with whiteList on response body?
我想防止在 NestJs 服务器的响应中返回对象键值(并在示例中使用 TypeOrm 实体)
例如,我想确保永远不会将用户密码发送给任何客户端:
user.entity.ts:
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
password: string;
}
user.controller.ts:
@Get('')
getAllUsers(): Promise<User[]> {
return this.userService.getAll(); // expected: [{id: 1}], actual: [{id: 1, password: '1234'}]
}
I 可以通过使用 class-validator 管道为请求体实现:
new ValidationPipe({
whitelist: true
})
user.dto.ts:
export class UserDto {
@Allow()
id: number;
password: string;
}
ValidationPipe
可以过滤那种类型的密钥吗?
还有其他优雅的解决方案吗?
AFIK ValidationPipe
用于验证 传入的 请求。
您应该定义一个 serialization interceptor 以正确删除您不想 return 的键。使用此设置,您无需验证 该 DTO。
我想防止在 NestJs 服务器的响应中返回对象键值(并在示例中使用 TypeOrm 实体)
例如,我想确保永远不会将用户密码发送给任何客户端:
user.entity.ts:
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
password: string;
}
user.controller.ts:
@Get('')
getAllUsers(): Promise<User[]> {
return this.userService.getAll(); // expected: [{id: 1}], actual: [{id: 1, password: '1234'}]
}
I 可以通过使用 class-validator 管道为请求体实现:
new ValidationPipe({
whitelist: true
})
user.dto.ts:
export class UserDto {
@Allow()
id: number;
password: string;
}
ValidationPipe
可以过滤那种类型的密钥吗?
还有其他优雅的解决方案吗?
AFIK ValidationPipe
用于验证 传入的 请求。
您应该定义一个 serialization interceptor 以正确删除您不想 return 的键。使用此设置,您无需验证 该 DTO。