workspace/core/catalog/auth
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00
..
IMPLEMENTATION.md feat: Initial workspace structure with multi-level Git configuration 2025-12-08 10:44:23 -06:00
README.md feat: Initial workspace structure with multi-level Git configuration 2025-12-08 10:44:23 -06:00

Autenticación y Autorización

Versión: 1.0.0 Origen: projects/gamilit Estado: Producción Última actualización: 2025-12-08


Descripción

Sistema completo de autenticación y autorización basado en JWT con:

  • Registro y login de usuarios
  • Tokens de acceso y refresh
  • Gestión de sesiones
  • Guards y decoradores
  • Sistema de roles (RBAC)
  • Recuperación de contraseña
  • Verificación de email

Características

Característica Descripción
JWT Access Tokens Tokens de corta duración (15min) para autenticación
JWT Refresh Tokens Tokens de larga duración (7d) para renovación
Password Hashing bcrypt con cost 10
Session Management Sesiones persistentes en BD con metadata
Role-Based Access Sistema RBAC con guards y decoradores
Multi-tenant Soporte para múltiples tenants
Security Logging Registro de intentos de autenticación

Stack Tecnológico

backend:
  framework: NestJS
  orm: TypeORM
  auth_library: "@nestjs/passport"
  jwt_library: "@nestjs/jwt"
  hashing: bcrypt
  validation: class-validator

database:
  engine: PostgreSQL
  schemas:
    - auth (usuarios principales)
    - auth_management (perfiles, sesiones, tokens)

Dependencias NPM

{
  "@nestjs/jwt": "^10.x",
  "@nestjs/passport": "^10.x",
  "passport": "^0.7.x",
  "passport-jwt": "^4.x",
  "bcrypt": "^5.x",
  "class-validator": "^0.14.x",
  "class-transformer": "^0.5.x"
}

Tablas Requeridas

Schema Tabla Propósito
auth users Usuarios del sistema
auth_management profiles Perfiles extendidos
auth_management tenants Multi-tenancy
auth_management roles Definición de roles
auth_management user_roles Asignación de roles
auth_management user_sessions Sesiones activas
auth_management auth_attempts Log de intentos
auth_management password_reset_tokens Tokens de reset
auth_management email_verification_tokens Tokens de verificación

Estructura del Módulo

auth/
├── auth.module.ts              # Módulo principal
├── controllers/
│   ├── auth.controller.ts      # Login, register, refresh
│   ├── password.controller.ts  # Reset, change password
│   └── users.controller.ts     # Profile, preferences
├── services/
│   ├── auth.service.ts         # Lógica de autenticación
│   ├── session-management.service.ts
│   ├── security.service.ts
│   ├── password-recovery.service.ts
│   └── email-verification.service.ts
├── entities/
│   ├── user.entity.ts
│   ├── profile.entity.ts
│   ├── tenant.entity.ts
│   ├── role.entity.ts
│   ├── user-role.entity.ts
│   ├── user-session.entity.ts
│   ├── auth-attempt.entity.ts
│   └── ...
├── dto/
│   ├── login.dto.ts
│   ├── register-user.dto.ts
│   ├── refresh-token.dto.ts
│   ├── change-password.dto.ts
│   └── ...
├── guards/
│   ├── jwt-auth.guard.ts
│   └── roles.guard.ts
├── strategies/
│   └── jwt.strategy.ts
├── decorators/
│   └── roles.decorator.ts
└── __tests__/
    ├── auth.controller.spec.ts
    ├── auth.service.spec.ts
    └── ...

Endpoints Principales

Método Ruta Descripción Auth
POST /auth/register Registro público No
POST /auth/login Login con email/password No
POST /auth/refresh Renovar access token Refresh Token
POST /auth/logout Cerrar sesión JWT
GET /auth/me Obtener usuario actual JWT
POST /auth/change-password Cambiar contraseña JWT
POST /auth/request-reset Solicitar reset password No
POST /auth/reset-password Reset con token Token

Uso Rápido

1. Proteger una ruta con JWT

import { Controller, Get, UseGuards, Request } from '@nestjs/common';
import { JwtAuthGuard } from '@/modules/auth/guards';

@Controller('protected')
export class ProtectedController {
  @Get()
  @UseGuards(JwtAuthGuard)
  getProtectedData(@Request() req) {
    // req.user contiene el payload del JWT
    return { userId: req.user.id, email: req.user.email };
  }
}

2. Proteger por roles

import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard, RolesGuard } from '@/modules/auth/guards';
import { Roles } from '@/modules/auth/decorators';
import { RoleEnum } from '@/shared/constants';

@Controller('admin')
@UseGuards(JwtAuthGuard, RolesGuard)
export class AdminController {
  @Get()
  @Roles(RoleEnum.ADMIN, RoleEnum.SUPER_ADMIN)
  adminOnly() {
    return { message: 'Solo para administradores' };
  }
}

3. Configurar el módulo

// app.module.ts
import { AuthModule } from '@/modules/auth/auth.module';

@Module({
  imports: [
    AuthModule,
    // ... otros módulos
  ],
})
export class AppModule {}

Variables de Entorno Requeridas

# JWT
JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d

# Base de datos (para TypeORM)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=your_user
DB_PASSWORD=your_password

Flujos de Autenticación

Login Flow

1. Cliente envía email + password
2. AuthService valida credenciales
3. Si válidas:
   - Genera access token (15min)
   - Genera refresh token (7d)
   - Crea sesión en BD
   - Registra intento exitoso
4. Retorna tokens + user data

Refresh Flow

1. Cliente envía refresh token
2. AuthService verifica token
3. Busca sesión en BD por hash del refresh token
4. Si válida y no expirada:
   - Genera nuevos tokens
   - Actualiza sesión
5. Retorna nuevos tokens

Seguridad

  • Passwords hasheados con bcrypt (cost 10)
  • Refresh tokens hasheados en BD (SHA256)
  • Tokens JWT con expiración corta
  • Sesiones con metadata (IP, User-Agent, dispositivo)
  • Logging de todos los intentos de auth
  • Soft delete para usuarios (no eliminación física)

Adaptaciones Necesarias

Al implementar en un nuevo proyecto, ajustar:

  1. Enum de roles: Definir roles específicos del proyecto
  2. Schema de BD: Puede ser diferente a auth/auth_management
  3. Campos de User entity: Agregar/quitar según necesidades
  4. Conexión TypeORM: Ajustar nombre de conexión si no es 'auth'
  5. Variables de entorno: Configurar JWT_SECRET único

Referencias


Mantenido por: Sistema NEXUS Proyecto origen: Gamilit Platform