En este tutorial, aprenderás a implementar autenticación en un blog personal utilizando Nest.js. La autenticación se realizará mediante un token JWT (JSON Web Token) que permitirá acceder a las funcionalidades CRUD del blog de manera segura.
Primero, necesitaremos instalar la CLI de NestJS globalmente. Puedes hacerlo ejecutando el siguiente comando en tu terminal:
npm install -g @nestjs/cliCrea un nuevo proyecto de NestJS llamado blog-personal-nest ejecutando el siguiente comando:
nest new blog-personal-nestCrea un archivo llamado user.model.ts en el directorio src/auth y agrega el siguiente código:
// src/auth/user.model.ts
export interface User {
username: string;
password: string;
}Crea un archivo llamado auth.controller.ts en el directorio src/auth y agrega el siguiente código:
// auth.controller.ts
import { Controller, Post, Body } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto';
@Controller('auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}
@Post('login')
async login(@Body() loginDto: LoginDto) {
return this.authService.login(loginDto);
}
}Crea un archivo llamado auth.service.ts en el directorio src/auth y agrega el siguiente código:
// auth.service.ts
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { LoginDto } from './dto/login.dto';
@Injectable()
export class AuthService {
constructor(private readonly jwtService: JwtService) {}
async login(loginDto: LoginDto) {
const { username, password } = loginDto;
// Verificar las credenciales del usuario
const isValidCredentials = await this.validateCredentials(
username,
password,
);
if (!isValidCredentials) {
throw new UnauthorizedException('Credenciales inválidas');
}
// Generar y devolver un token JWT
const payload = { username };
const accessToken = this.jwtService.sign(payload);
return { access_token: accessToken };
}
async validateCredentials(
username: string,
password: string,
): Promise<boolean> {
// Lógica para verificar las credenciales del usuario
// Esto puede implicar consultar una base de datos o un servicio externo
// Devuelve true si las credenciales son válidas, de lo contrario false
return true; // Replace with your logic to validate the credentials
}
}Crea un archivo llamado login.dto.ts en el directorio src/auth/dto y agrega el siguiente código:
// login.dto.ts
export class LoginDto {
username: string;
readonly password: string;
constructor(username: string, password: string) {
this.username = username;
this.password = password;
}
}Modifica el archivo auth.module.ts en el directorio src/auth y agrega el siguiente código:
// auth.module.ts
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt'; // Importa JwtModule
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
@Module({
imports: [
JwtModule.register({
secret: 'YOUR_SECRET_KEY',
signOptions: { expiresIn: '1h' }, // Define la expiración del token
}),
],
controllers: [AuthController],
providers: [AuthService],
})
export class AuthModule {}Abre el archivo app.module.ts en el directorio src y modifícalo para importar el módulo de autenticación:
import { Module } from '@nestjs/common';
import { AuthModule } from './auth/auth.module';
import { PostsModule } from './posts/posts.module'; // Importa el módulo de posts
@Module({
imports: [AuthModule, PostsModule], // Importa tanto el módulo de autenticación como el módulo de posts
})
export class AppModule {}Ejecuta la aplicación con el siguiente comando en tu terminal:
cd blog-personal-nest
npm run start:devEsto iniciará el servidor de desarrollo de NestJS y automáticamente reiniciará cuando se realicen cambios en el código.
Utiliza una herramienta como Postman o Insomnia para enviar una solicitud POST a http://localhost:3000/auth/login con el siguiente cuerpo JSON:
{
"username": "tu_usuario",
"password": "tu_contraseña"
}Deberías recibir un token JWT como respuesta si las credenciales son válidas.
Si esto funciona correctamente, ¡has implementado la autenticación en tu blog personal utilizando NestJS!
Ahora es momento de probarlo realizando las peticiones mediante Postman o Insomnia, en este caso utilizare Thunder Client, una extensión de Visual Studio Code.
En la sección de Autenticación, selecciona Bearer Token y pega el token que recibiste al hacer la petición de login.
Ejemplo de autorización con el token JWT:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzdWFyaW8iLCJpYXQiOjE3MDgzMjQ4NjMsImV4cCI6MTcwODMyODQ2M30.D6qsABp9OWrbiBCGqUBUmGjtzuVfmNwJi4B9JXlDemM
¡Y eso es todo! Has implementado la autenticación en tu blog personal utilizando NestJS. Puedes seguir añadiendo funcionalidades como la creación, actualización y eliminación de publicaciones según tus necesidades.
Recuerda que este tutorial es solo una guía básica y que debes implementar medidas de seguridad adicionales y seguir las mejores prácticas de autenticación y autorización en tu aplicación.
¡Espero que te haya sido útil! Si tienes alguna pregunta, no dudes en preguntar.

