sequelize / sequelize-typescript

Decorators and some other features for sequelize
MIT License
2.79k stars 282 forks source link

how to hide password when get the model #1712

Open susatyo441 opened 8 months ago

susatyo441 commented 8 months ago

Issue

How can I hide the password? is there any way to not select the password using typescript-sequelize?

Versions

Issue type

Actual behavior

Expected behavior

Steps to reproduce

Related code

// src/models/user.model.ts

import { Table, Column, Model } from 'sequelize-typescript';
import { Exclude } from 'class-transformer';
import { IsNotEmpty } from 'class-validator';
import { IsEmail } from 'class-validator';

@Table
export class User extends Model {
  @Column
  @IsNotEmpty()
  name: string;

  @Column
  @IsEmail()
  email: string;

  @Column
  @Exclude({ toPlainOnly: true })
  password: string;

  @Column({
    type: 'ENUM',
    values: ['l', 'p'],
  })
  gender: string;
}
knguyen0125 commented 7 months ago

I override toJSON

  toJSON() {
    const json = super.toJSON();
    // Make sure that the password is not included in the response
    delete json.password;
    return json;
  }
NenadJovicic commented 7 months ago

You can also use scopes for this

@Table
@DefaultScope(() => {
  exclude: ['password']
})
export class User extends Model {...}

And then, for cases where you need it, you can create a different @Scope() you can find more here https://github.com/sequelize/sequelize-typescript?tab=readme-ov-file#scopes

exos commented 4 months ago
  @Column({
      get: () => undefined,
  })
  password: string;