はじめに
セキュリティ上、どうしてもDB上から取得したデータに特定プロパティが含まれないようにしたいときがあるかと思います。
そのときの対応方法をまとめています。
方法
Entityクラスに@Exclude({ toPlainOnly: true })
を該当プロパティ上に記載する
import { Exclude } from '@nestjs/class-transformer';
export class User {
id: number;
email: string;
@Exclude({ toPlainOnly: true })
password: string;
}
適用したいcontrollerに
@UseInterceptors(ClassSerializerInterceptor)
もしくはグローバル上で適用したい場合は
app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector)));
こうすることでUserデータを取得したときにパスワードが含まれないようになります。
おまけ
GraphQL(コードファースト)上でも返却値に特定プロパティをを除外する方法があったので記載しておきます。
その方法は該当プロパティ上に@HideField()
を付与する。
@ObjectType()
export class User {
@Filed(() => Int)
id: number
@Field()
email: string
@HideField()
password: string
}