TypeORM - никогда не возвращать пароль из базы данных при получении пользователя - PullRequest
1 голос
/ 11 января 2020

Я создал REST API, используя Nest Js с TypeORM. По сути, это мой пользовательский объект

@Entity('User')
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({ unique: true })
  public username: string;

  public passwordHash: string;
}

При извлечении пользователей из базы данных также возвращается конфиденциальная информация о пароле. Но мне нужно только поле пароля для входа в систему. Поэтому при вызове сервиса для входа я сравниваю пароль ha sh от пользователя базы данных с предоставленным клиентом паролем. Я никогда не хотел бы возвращать информацию о пароле обратно клиенту.

Поскольку вы можете извлекать изображения пользователей из базы данных довольно часто, вам придется довольно часто удалять информацию о паролях из объекта пользователя.

Предположим, у вас есть групповая сущность и между ними есть связь. При выборе пользователей, связанных с группой, вам также придется позаботиться о конфиденциальных данных в домене групп.

И, возможно, некоторые пользователи глубоко вложены в объект, возвращаемый большим оператором запроса SQL. Есть ли способ, которым я могу «спрятать» некоторые поля? При вызове this.usersRepository.find() я получал бы список пользователей, и у каждого пользователя было бы поле id и username , но не a passwordHash. Это упростит задачу, потому что мне нужно только извлечь поле ha sh в моем потоке signIn.

1 Ответ

3 голосов
/ 11 января 2020

Просто добавьте параметр select: false в определение столбца. При этом столбец не будет выбран, если явно не добавлено через addSelect, см. Документы .

@Entity()
export class User {

    @Column({select: false})
    password: string;
}
...