es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hashear una contraseña con el Event Subscriber Typeorm

Pregunta rápida:

He buscado en StackOverflow y no he visto una pregunta directa como esta, también parece que Google no da una buena respuesta.

Estoy usando Nestjs y Typeorm y estoy intentando cifrar una contraseña usando EventSubscriber().

Aquí está el código:
user.subscriber.ts

@EventSubscriber()
export class UserSubscriber implements EntitySubscriberInterface {
private iterations = Number(process.env.PASSWORD_ITERATIONS);
// eslint-disable-next-line @typescript-eslint/ban-types
public listenTo(): Function | string {
return User;
}

public afterLoad(
    entity: User,
    event?: LoadEvent<user>,
): Promise<any> | void {}

public beforeInsert(event: InsertEvent<user>): Promise<any> | void {
    const { password } = event.entity;
    const salt = crypto.randomBytes(20).toString('hex');
    const hash = crypto
        .pbkdf2Sync(password, salt, this.iterations, 32, 'sha512')
        .toString('hex');
    event.entity.password = [salt, hash].join('$');
}

}

Estoy intentando cifrar la contraseña antes de la inserción, y luego establecerla como la contraseña del usuario. Cosas bastante fáciles. Solo quería asegurarme de que la forma en que lo hice aquí sea la mejor forma. Funciona, pero me preocupa restablecer el evento.entity.password como lo estoy haciendo.

Cualquier comentario sería apreciado, y si este no es el lugar para esta pregunta, por favor avíseme y lo moveré. 🙂 ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que vas por buen camino con la encriptación de la contraseña en el gancho beforeInsert del EventSubscriber. Esta es una práctica común para asegurar contraseñas en aplicaciones.

    En cuanto al restablecimiento de event.entity.password, debería estar bien siempre y cuando no tengas otros ganchos o funciones que dependan de la propiedad original password. También es una buena práctica almacenar la sal y el hash en propiedades separadas en lugar de concatenarlas como lo hiciste. Esto facilita obtener la sal y el hash por separado para fines de verificación.

    En general, tu implementación debería funcionar bien para asegurar las contraseñas de los usuarios en TypeORM con Nestjs.

Comments are closed.