在响应NestJS/Mongoose中对用户隐藏敏感数据

ie3xauqp  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(206)

上周我开始玩nest,即使我发现它超级有用,也有一些事情是我无法从经典的Express/Mongoose应用程序中复制的。其中一件事是在返回时提供敏感数据作为密码。
例如,在Express/Mongoose应用中,我将这样做来清理用户可以看到的内容:

const { Schema, model } = require("mongoose");

const UserSchema = new Schema({
  name: {
    type: String,
    required: [true, "Name is required"],
  },
  email: {
    type: String,
    required: [true, "Email is required"],
    unique: true,
  },
  password: {
    type: String,
    required: [true, "Password is required"],
  },
  img: {
    type: String,
  },
  rol: {
    type: String,
    required: true,
    emun: ["ADMIN_ROL", "USER_ROL"],
  },
  state: {
    type: Boolean,
    default: true,
  },
  google: {
    type: Boolean,
    default: false,
  },
});

UserSchema.methods.toJSON = function () {
  const { __v, _id, password, ...user } = this.toObject();
  user.uid = _id;
  return user;
};

module.exports = model("Users", UserSchema);

正如您所看到的,我实现了类的方法来清理user对象,并返回一个安全且干净的响应。
与此同时,使用NestJS/Mongoose创建用户模式的类似方法如下:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type UserDocument = User & Document;

@Schema()
export class User {
  @Prop({
    required: [true, 'Name is required'],
  })
  name: string;
  @Prop({
    required: [true, 'Password is required'],
  })
  password: string;
  @Prop()
  img: string;
  @Prop({
    required: true,
    enum: ['ADMIN_ROL', 'USER_ROL'],
  })
  rol: string;
  @Prop({
    default: true,
  })
  state: boolean;
  @Prop({
    default: false,
  })
  google: boolean;
}

export const UserSchema = SchemaFactory.createForClass(User);

非常基本的,只是遵循NestJS文档。
使用Nest实现相同结果的最佳方法是什么?
此外,我会喜欢问你任何博客/youtuber的工作与巢,这将是赞赏

x9ybnkn6

x9ybnkn61#

Nest.js提供了OpenAPI规范中的Mapped Types
您可以使用PartialTypeOmitTypePickType函数来建立DTO

oipij1gg

oipij1gg2#

如以下示例所示更改架构:

...
password: {
    type: String,
    required: [true, "Password is required"],
    select: false
  },
...

如果要隐藏字段,请添加select属性并设置为false

相关问题