javascript - TypeORM - aldri returner passordet fra databasen når du henter en bruker


Jeg opprettet en REST API ved hjelp av NestJs med TypeORM. Dette er i utgangspunktet min brukerenhet

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

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

  public passwordHash: string;
}

Når man henter brukere fra databasen, blir også sensitive passordopplysninger returnert. Men jeg trenger bare passordfeltet for innloggingsprosessen. Så når jeg kaller tjenesten for innlogging, sammenligner jeg passordhashen fra databasebrukeren med det oppgitte passordet fra klienten. Jeg vil aldri ønske å returnere passordinformasjonen tilbake til klienten.

Som du kan forestille deg skjer det ganske ofte å hente brukere fra databasen, og du måtte ofte slette passordinformasjonen fra brukerobjektet.

La oss anta at du har en gruppeenhet og har en relasjon mellom dem. Når du henter brukere som er relatert til en gruppe, må du også ta hensyn til sensitive data i gruppens domene.

Og kanskje noen brukere er dypt nestet innenfor et objekt som returneres av en stor SQL-spørring. Finnes det en måte jeg kan «skjule» noen felt på? Når jeg kaller this.usersRepository.find() vil jeg få en liste over brukere, og hver bruker vil ha et id- og et username-felt men ikke et passwordHash-felt. Dette vil gjøre ting enklere fordi jeg bare trenger å hente hash-feltet innenfor min signIn-flyt.

Svar #1

Legg bare til select: false alternativet i kolonnedefinisjonen. Med det vil ikke kolonnen bli valgt med mindre den eksplisitt legges til via addSelect, se dokumentasjonen.

@Entity()
export class User {

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

Relaterte artikler