Implementación de Controlador de Login con NestJS y Estrategia Local
Clase 10 de 22 • Curso de NestJS: Autenticación con Passport y JWT
Contenido del curso
Protección con guardianes
Autenticación con Passport
Autenticación con JSON Web Tokens
- 11

Implementación de JSON Web Tokens en APIs para Autenticación Segura
09:42 min - 12

Implementación de JWT en Módulo de Autenticación con Variables de Entorno
17:15 min - 13

Estrategia y Guardia de Autenticación con JWT en NestJS
16:38 min - 14

Extensión de Guardianes JWT en NestJS para Endpoints Públicos
12:39 min - 15

Control de Roles y Permisos con JSON Web Tokens en TypeScript
23:08 min - 16
Creación de Endpoints Seguros con JWT en NestJS
02:13 min
Deployment
- 17

Configuración y Despliegue de MongoDB Atlas en Heroku
06:24 min - 18

Configuración de Variables de Entorno en Heroku para MongoDB
16:25 min - 19

Configuración de PostgreSQL en Heroku para Node.js
07:32 min - 20

Configuración de Conexiones a Base de Datos en Heroku y Entorno Local
11:24 min - 21

Migraciones con TimeORM en Producción: Configuración y Ejecución
20:41 min
Próximos pasos
¿Cómo probar la implementación de login en un proyecto NestJS?
¡Finalmente es el momento de poner a prueba nuestro sistema de autenticación! En este artículo te explicaremos cómo verificar si la implementación de login en un proyecto NestJS ha sido exitosa utilizando un controlador y probándola con herramientas como Insomnia. Este proceso es esencial para garantizar que el sistema de autenticación funcione correctamente y proporcione la respuesta adecuada a los usuarios.
¿Cómo crear un controlador en NestJS?
Para comenzar, necesitamos definir un controlador de login. Usaremos el generador de NestJS con el siguiente comando:
nest generate controller controllers/out --flat
Este comando crea un controlador llamado OutController y lo integra como parte del módulo outModule. En el controlador, creamos un nuevo método de tipo POST que recibirá el identificador y contraseña del usuario.
Utilizamos el decorador @Req para obtener el request y lo manejamos como un tipo de request de Express. Allí validamos las credenciales ingresadas y, si son correctas, devolvemos el usuario autenticado.
¿Cómo proteger las rutas con guardias en NestJS?
Nuestra implementación de login también requiere validar las credenciales de usuario de manera segura. Para esto, utilizamos los guardianes de seguridad con la estrategia de autenticación que definimos:
@UseGuards(AuthGuard('local'))
@Post('login')
async login(@Req() req) {
return req.user;
}
Aquí aplicamos AuthGuard para proteger el endpoint, utilizando la estrategia llamada local. Si las credenciales del usuario coinciden, el guardián permite que el proceso de autenticación continúe, devolviendo el usuario. De lo contrario, deniega el acceso.
¿Cómo probar el endpoint de login con Insomnia?
Una vez que el controlador y la seguridad están configurados, es momento de probar la funcionalidad. Utilizamos una herramienta como Insomnia para enviar solicitudes y verificar la respuesta del servidor.
-
Configura el endpoint:
- Método:
POST - URL:
http://localhost:<puerto>/out/login - Cuerpo:
{ "email": "usuario@ejemplo.com", "password": "tucontraseña" }
- Método:
-
Prueba con credenciales correctas: Envía la solicitud con un email y contraseña válidos y verifica que recibas el objeto usuario como respuesta.
-
Prueba con credenciales incorrectas: Cambia el password y el email para verificar el manejo de errores y asegúrate de recibir un mensaje de no autorizado o error 500 dependiendo del caso.
¿Cómo resolver problemas comunes?
Durante las pruebas, podrías enfrentar algunos problemas comunes:
-
Sin retorno de mensaje: Asegúrate de que estás agregando
awaiten las promesas para capturar correctamente las excepciones. -
Manejo de valores nulos: Si recibes un error relacionado con un valor nulo, como al intentar obtener la propiedad
passwordde un usuario que no existe, ajusta la lógica para validar primero la existencia del usuario antes de acceder a sus propiedades.
¿Cómo personalizar los campos de usuario en la estrategia local?
Podemos personalizar los nombres de los campos que utiliza nuestra estrategia de autenticación. Por defecto, usa username y password, pero podemos cambiarlos mediante el siguiente ajuste en la LocalStrategy:
super({
usernameField: 'email',
passwordField: 'password'
});
Estos cambios permiten enviar credenciales con nombres personalizados, como email, sin romper el funcionamiento del sistema de autenticación.
Este recorrido por la configuración y prueba del sistema de login en NestJS es una guía esencial para asegurar que tu aplicación maneje de manera efectiva la autenticación de usuarios. Invitamos a seguir experimentando y ajustando las configuraciones para adaptarse a las necesidades de tu proyecto. ¡Es un paso significativo en el dominio del desarrollo seguro y eficiente con NestJS!