No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Hashing de contrase帽as en TypeORM

7/22
Recursos

Aportes 9

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

En caso de que alguien tenga preocupaciones de seguridad a la hora de traer el usuario con contrase帽a del DB ( en ocasiones es necesario), con typeORM se puede a帽adir el atributo 鈥渟elect鈥 en la petici贸n findOne y traer solo los atributos necesarios

const user = await this.userRepo.findOne(
            {
                where: { id },
                select: ["username", "email", "role"] }
            );

Hola 馃憢
Tambi茅n podemos hashear la contrase帽a en la creaci贸n y en la actualizaci贸n autom谩ticamente con este m茅todo en su entidad. 馃

@BeforeInsert()
@BeforeUpdate()
async hashPassword() {
  if (!this.password) return;

  const salt = await bcrypt.genSaltSync(10);

  this.password = await bcrypt.hashSync(this.password, salt);
}

Espero haberles ayudado 馃殌

Para los que est谩n usando Mongoose y quieren eliminar el password de la respuesta pueden instalar el paquete:
npm i nestjs-mongoose-exclude luego en su Entity utilizar el decorador @ExcludeProperty() y por 煤ltimo utilizar un Interceptor a nivel de ruta o del controlador completo
quedar铆a as铆:

@Prop({ required: true })
  @ExcludeProperty()
  password: string;
@UseInterceptors(
  new SanitizeMongooseModelInterceptor({
    excludeMongooseId: false,
    excludeMongooseV: true,
  }),
)
@Controller('users')

En el caso de Mongo para hacer el findOne

  async findByMail(email: string) {
    return await this.UserModel.findOne({ where: { email: email } });
  }

Para poder entender de una manera mas simple el hash, la particularidad de este m茅todo de seguridad es que el Hash en si no se desencripta una vez ha sido encriptado. Simplemente se compara el c贸digo (o password) ingresado al momento de iniciar sesi贸n con el hash almacenado en la base de datos.

Creo que una forma mas limpia seria hacer un pipe que realice un hashing de la contrase帽a.

npm i bcrypt
npm i -D @types/bcrypt

馃憦

npm i bcrypt