編集:
私はこの質問/回答を見てきましたコントローラーjsonからエンティティフィールドを除外する方法
しかし、以下のように-これはすべてのクエリからそのフィールドを除外しています(ユーザー検証を処理しようとすると、パスワードフィールドが除外されますClassSerializerInterceptor を持たないルート/コントローラー メソッドでの findOne リポジトリ クエリ
Nest.js / typeorm 内にエンティティがあります。返された json からパスワード フィールドを除外しようとしていますが、サービス内のリポジトリ クエリからパスワード フィールドを除外していません。例えば:
user.entity.ts
:
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn,
UpdateDateColumn, ManyToOne } from 'typeorm';
import { Exclude } from 'class-transformer';
import { Account } from '../accounts/account.entity';
@Entity()
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({
unique: true,
})
email: string;
@Column()
password: string;
}
auth.controller.ts
:
import { Controller, Post, Body, Request, Req, Get, UseInterceptors, ClassSerializerInterceptor, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { IUserRequest } from '../../interfaces/user-request.interface';
@Controller('auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}
@Post('/login')
async login(@Request() req: Request) {
const user = await this.authService.checkCredentials(req.body);
return this.authService.logUserIn(user.id);
}
@Get('/profile')
@UseGuards(AuthGuard())
@UseInterceptors(ClassSerializerInterceptor)
async profile(@Request() req: IUserRequest) {
const profile = await this.authService.getLoggedInProfile(req.user.id);
return { profile };
}
}
Exclude()
そのようにパスワードに追加すると
@Exclude()
@Column()
password: string;
パスワードは応答に含まれています
Column()
パスワードから削除すると、
@Exclude()
password: string;
パスワードは、応答および次のようなすべての内部クエリから除外されます。
const user = await this.userRepository.findOne({ where: { id }, relations: ['account']});
を使用して、これは Nest.js で可能ClassSerializerInterceptor
ですか?
もしそうなら、正しい方向へのポインタをいただければ幸いです。