Nest: Autenticación
Aprende a implementar autenticación en NestJS con esta guía detallada. Con ejemplos prácticos y recomendaciones, mantén tu aplicación segura.
Aprende Nest GRATIS y certifícateLa autenticación es un componente crítico en cualquier aplicación web, y NestJS ofrece varias herramientas y estrategias para implementar un sistema de autenticación robusto. En esta guía, exploraremos cómo configurar y utilizar autenticación en NestJS, desde la instalación de dependencias hasta la creación de estrategias personalizadas.
Instalación de dependencias
Primero, necesitamos instalar las dependencias necesarias. Para manejar la autenticación, utilizaremos @nestjs/passport
, passport
, y passport-local
.
npm install @nestjs/passport passport passport-local
npm install --save-dev @types/passport-local
Configuración del módulo de autenticación
Creamos un módulo de autenticación que gestionará la lógica de autenticación. Para ello, generamos un nuevo módulo y servicio en NestJS:
nest generate module auth
nest generate service auth
Implementación de la estrategia local
La estrategia local es una de las más utilizadas para autenticación mediante nombre de usuario y contraseña. Configuramos la estrategia local creando un archivo local.strategy.ts
en el módulo de autenticación.
import { Strategy } from 'passport-local';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { AuthService } from './auth.service';
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super();
}
async validate(username: string, password: string): Promise<any> {
const user = await this.authService.validateUser(username, password);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
En el servicio de autenticación, añadimos un método validateUser
que verifica las credenciales del usuario.
import { Injectable } from '@nestjs/common';
import { UsersService } from '../users/users.service';
@Injectable()
export class AuthService {
constructor(private usersService: UsersService) {}
async validateUser(username: string, password: string): Promise<any> {
const user = await this.usersService.findOne(username);
if (user && user.password === password) {
const { password, ...result } = user;
return result;
}
return null;
}
}
Creación del controlador de autenticación
El siguiente paso es crear un controlador que maneje las rutas de autenticación. Generamos un archivo auth.controller.ts
en el módulo de autenticación.
import { Controller, Request, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller('auth')
export class AuthController {
@UseGuards(AuthGuard('local'))
@Post('login')
async login(@Request() req) {
return req.user;
}
}
Protección de rutas
Para proteger rutas específicas dentro de la aplicación, utilizamos el guard AuthGuard
de Passport. Por ejemplo, en un controlador de usuarios, añadimos el guard a las rutas que queremos proteger.
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller('users')
export class UsersController {
@UseGuards(AuthGuard('local'))
@Get('profile')
getProfile(@Request() req) {
return req.user;
}
}
Lecciones de este módulo de Nest
Lecciones de programación del módulo Autenticación del curso de Nest.
Ejercicios de programación en este módulo de Nest
Evalúa tus conocimientos en Autenticación con ejercicios de programación Autenticación de tipo Test, Puzzle, Código y Proyecto con VSCode.