Implementación de Controlador de Login con NestJS y Estrategia Local
Clase 10 de 22 • Curso de NestJS: Autenticación con Passport y JWT
Resumen
¿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
await
en 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
password
de 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!