【发布时间】:2019-06-17 02:54:39
【问题描述】:
编辑:
我已经看过这个问题/答案How to exclude entity field from controller json
但是,如下所述 - 这是从所有查询中排除该字段(到尝试处理用户验证时,使用 findOne 存储库查询排除在没有 ClassSerializerInterceptor 的路由/控制器方法上的密码字段
我在 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 是否可行?
如果是这样,将不胜感激指向正确方向的指针。
【问题讨论】:
标签: javascript node.js typescript nestjs class-transformer