npm install --save @nestjs/passport passport passport-local
npm install --save-dev @types/passport-local
Introducción
Cómo autenticar usuarios con NestJS
Instalación de PlatziStore con MongoDB
Instalación de PlatziStore con TypeORM
Protección con guardianes
Introducción a Guards
Usando un decorador
Guard con variables de ambiente
Autenticación con Passport
Hashing de contraseñas en TypeORM
Hashing de contraseñas en MongoDB
Autenticación con Passport.js
Ruta de login
Autenticación con JSON Web Tokens
Conectando Passport con JWT
Secret desde variables de entorno
Implementando JWT Guard
Extendiendo JWT Guard
Control de roles en NestJS
Obteniendo órdenes del perfil
Deployment
Configurando Mongo Atlas
Deploy de Mongo en Heroku
Configuración de PostgreSQL en Heroku
Deploy de Postgres en Heroku
Corriendo migraciones de Postgres en Heroku
Próximos pasos
¿Quieres más cursos de NestJS?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 5
Preguntas 1
npm install --save @nestjs/passport passport passport-local
npm install --save-dev @types/passport-local
Si no les funciona la autenticacion probablemente sea porque estan usando el campo de email, passport por defecto espera un username y un password. Para que funcione con email en el contructor por medio del metodo super de local.stretegy.ts se debe indicar de la siguiente maneral:
constructor(private authService: AuthService) {
super({ usernameField: 'email' });
}
Un aporte que tengo que decir con conocimiento mas profundamente de hashing , es que si bien Nico dijo que en “bcrypt.compare(password_entrada, password_guardada)” solamente el usuario “desencriptará” para ver si la contraseña es la original, esto no es así.
Nadie desencripta la contraseña, de hecho, con la funcion hash, es imposible saber su dominio. A esto se le llama one way function, una one way function es una funcion que toma una entrada y arroja una salida,
podemos establecer la relacion desde entrada -> salida, pero jamas salida -> entrada, es decir sabiendo la salida nunca vamos a determinar la entrada.
Por ende, en este caso, lo que hace bcrypt.compare realmente no es “deshashear” el hash guardado y ver si es compatible con la password_entrada en texto plano, seria muy inseguro esto, ya que le daria saber a los atacantes que se puede obtener entrada con salida y no.
Lo que hace realmente es tomar el password_entrada, y utilizar bcrypt.hash(password_entrada, salt) donde esta salt es la MISMA que la que se usó en el bcrypt.hash de la password_guardada, posteriormente este hash a la password_entrada se compara con password_guardada (que ya esta en version hash), de esta forma nadie desencriptará nada.
La salt y rounds son dos cosas distintas.
Salt es un texto extra que se le adiciona a la entrada para proveer de mas seguridad al hasheado, ejemplo, si el usuario digita su password para guardar “pepito123” y la salt es "qwerty) el hash guardado no sera el hash de “pepito123” sera el hash “pepito123”+salt , o sea concatenados.
Las rounds son cuantas veces se vuelve a hashear en un hash, o sea, si tengo un hash de 2 rounds, significa
password_entrada -> hash(password_entrada) -> hash(hash(password_entrada)), matematicamnete se conoce como composicion de funciones. La entrada de una es la salida de la anterior.
nest generate service auth/services/auth
👏
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?