Nest
Tutorial Nest: Iniciar sesión método de login
Nest login JWT: autenticación y seguridad. Aprende a implementar autenticación y seguridad utilizando JWT en Nest con ejemplos prácticos.
Aprende Nest GRATIS y certifícateIntroducción
Crear un método para autenticar usuarios (login).
Este verifica la existencia de un usuario y si sus credenciales son correctas entonces genera un Token JWT para el acceso a los controladores para ese usuario.
Instalar librerías
Instalar las librerías de autenticación y generación de tokens JWT, además de bcrypt para verificar contraseñas cifradas:
npm install @nestjs/jwt @nestjs/passport passport passport-jwt bcrypt
Configurar JwtModule
Este módulo proporciona un servicio JwtService para crear tokens JWT firmados con clave secreta. En el archivo app.module.ts
configuramos este módulo:
@Module({
imports: [
PassportModule, // módulo de autenticación
JwtModule.register({
secret: 'admin',
signOptions: {expiresIn: '7d'}
}),
],
controllers: [AuthenticationController],
providers: [],
})
export class AppModule {}
La clave secreta en este ejemplo es ‘admin’, lo aconsejable es cambiarla por una clave segura, que se puede generar con un script js independiente.
Crear archivo secrets.js
con código JavaScript para generar claves seguras:
/*
Script para generar una clave secreta segura para creación de tokens JWT:
2 bytes = 256 bits
Ejemplo:
141adb5ed1bfba15da8298f2cd7bc88e84289a533c4057b1fa9340ce02a03943
Almacenar la clave en una variable de entorno.
Las variables de entorno se acceden en NestJS:
JwtModule.register({
secret: process.env.SECRETO,
signOptions: {expiresIn: '7d'}
}),
*/
const crypto = require('crypto');
const secret = crypto.randomBytes(32).toString('hex');
console.log(secret);
Ejecutar el archivo y generar una clave secreta. Después utilizar esa clave en la configuración del módulo JWT anterior.
Método de login
Crear interfaz login.dto.ts para recibir las credenciales del usuario en el login:
export interface Login {
email: string; // también podría ser el username o nickname
password: string;
}
En el controlador AuthenticationController creamos un método de login:
constructor(
@InjectRepository(User) private userRepository: Repository<User>,
private jwtService: JwtService
) {}
@Post('login')
async login(@Body() login: Login) {
// comprobar si el email existe
const exists = await this.userRepository.existsBy({
email: login.email
});
if(!exists)
throw new NotFoundException("Usuario no encontrado."); // 404
// Recuperar el usuario
const user = await this.userRepository.findOne({
where: {
email: login.email
}
});
// Comparar contraseñas
// IMPORTANTE: la contraseña de base de datos está CIFRADA con bcrypt
//if (user.password !== login.password) {
if (! bcrypt.compareSync(login.password, user.password)) {
throw new UnauthorizedException("Credenciales incorrectas."); // 401
}
// Crear y devolver token de acceso (JWT)
let userData = {
sub: user.id,
email: user.email,
role: user.role
// agregar más información si se necesita
};
let token = {
token: await this.jwtService.signAsync(userData)
}
return token;
}
Recepción del token
Una aplicación frontend debería tener un formulario de login que llame al método login del controlador de NestJS.
Por ejemplo en Angular podría ser login.component.ts.
Ejemplo de petición de login:
Una vez completado el login, el frontend recibe un token JWT, ejemplo de respuesta de login:
Ejemplo de token JWT obtenido:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEsImVtYWlsIjoidXNlcjFAZ21haWwuY29tIiwicm9sZSI6ImFk.....
Verificar token JWT
En jwt.io se puede comprobar el token y su estructura interna:
Ejercicios de esta lección Iniciar sesión método de login
Evalúa tus conocimientos de esta lección Iniciar sesión método de login con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Métodos GET en controladores
Método find en un servicio con repositorio
Desarrollo e inyección de servicios
Creación de entidades y tablas
Método DELETE en un controlador
Filtrados en consultas de repositorios
Método GET en un controlador
Estrategia de autenticación JwtStrategy
CRUD con repositorios
Método delete en un servicio con repositorio
API REST CRUD de entidad Restaurante con TypeORM
Creación de una entidad TypeORM
Crear y utilizar módulos
Métodos PUT en controladores
Iniciar sesión método de login
Configuración de TypeORM con MySQL
Gestión de errores en controladores
Decoradores en entidades
Instalación NestJS
Recibir y servir imágenes
Estrategia de autenticación JWT
Método PUT en un controlador
Comandos NestJS CLI
Método POST en un controlador
Login y registro
API REST CRUD de entidades Product y Manufacturer
Método save en un servicio con repositorio
Registro de usuarios
Métodos POST en controladores
Todas las lecciones de Nest
Accede a todas las lecciones de Nest y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Instalación Nestjs
Introducción Y Entorno
Comandos Nestjs Cli
Introducción Y Entorno
Métodos Get En Controladores
Controladores
Métodos Post En Controladores
Controladores
Métodos Put En Controladores
Controladores
Métodos Delete En Controladores
Controladores
Gestión De Errores En Controladores
Controladores
Recibir Y Servir Imágenes
Controladores
Desarrollo E Inyección De Servicios
Servicios E Inyección De Dependencias
Crear Y Utilizar Módulos
Módulos
Configuración De Typeorm Con Mysql
Typeorm
Creación De Entidades Y Tablas
Typeorm
Decoradores En Entidades
Typeorm
Crud Con Repositorios
Typeorm
Filtrados En Consultas De Repositorios
Typeorm
Registro De Usuarios
Autenticación
Iniciar Sesión Método De Login
Autenticación
Estrategia De Autenticación Jwtstrategy
Autenticación
Login Y Registro
Autenticación
Estrategia De Autenticación Jwt
Autenticación
Certificados de superación de Nest
Supera todos los ejercicios de programación del curso de Nest y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
Objetivos de aprendizaje de esta lección
- Configurar la seguridad JWT en NestJS
- Generar una clave secreta para firmar token JWT
- Generar token JWT en login
- Realizar login de usuarios (autenticar usuarios)