sequelize / sequelize-typescript

Decorators and some other features for sequelize

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

how to hide password when get the model

susatyo441 opened this issue · comments

Issue

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

Versions

  • sequelize: ^6.37.1
  • sequelize-typescript: 2.1.6
  • typescript: ^5.1.3

Issue type

  • bug report
  • [ x] feature request

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;
}

I override toJSON

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

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

  @Column({
      get: () => undefined,
  })
  password: string;