El sistema de autenticación de la API se basa en JSON Web Tokens (JWT). El flujo es simple: el cliente envía sus credenciales al único endpoint público de la API —Documentation Index
Fetch the complete documentation index at: https://mintlify.com/JuanM84/gestor-visitas/llms.txt
Use this file to discover all available pages before exploring further.
POST /api/auth/login —, recibe un token firmado y lo adjunta a todas las peticiones posteriores en la cabecera Authorization. No existe registro de sesiones en el servidor; la validez se determina enteramente a partir del token.
POST /api/auth/login
Este es el único endpoint que no requiere autenticación. Recibe las credenciales del usuario, las verifica contra la base de datos y, si son correctas, devuelve un token JWT junto con los datos básicos del usuario.Si el usuario está marcado como inactivo en el sistema, el login será rechazado con 401 aunque las credenciales sean correctas. Contacta al administrador para reactivar la cuenta.
Petición
POST /api/auth/login
Cuerpo de la petición
Dirección de correo electrónico del usuario registrado en el sistema. Se normaliza (trim) antes de la búsqueda.
Contraseña en texto plano. El servidor la compara contra el hash bcrypt almacenado en la base de datos.
Respuestas
- 200 — Éxito
- 400 — Campos faltantes
- 401 — Credenciales inválidas
Ejemplo con curl
Cómo usar el token en peticiones posteriores
Una vez obtenido el token, inclúyelo en la cabeceraAuthorization de todas las peticiones a endpoints protegidos, usando el esquema Bearer.
Ejemplo completo: login y petición autenticada
Ejemplo en JavaScript (fetch)
Contenido del token JWT
El token es un JWT firmado con el algoritmoHS256. Su payload incluye los siguientes campos:
| Campo | Tipo | Descripción |
|---|---|---|
id | number | Identificador único del usuario |
nombre | string | Nombre completo del usuario |
rol | string | Rol del usuario (Admin o Guía) |
iat | number | Timestamp de emisión (Unix epoch) |
exp | number | Timestamp de expiración (Unix epoch) |
Expiración del token
La duración del token se controla con la variable de entornoJWT_EXPIRY. Si no está definida, el valor por defecto es 24h.
El formato de
JWT_EXPIRY sigue la notación de la librería jsonwebtoken: 60 (segundos), 2d (días), 10h (horas), 7d (días), etc.Errores de autenticación
401 — Token ausente
401 — Token ausente
La petición no incluye la cabecera Solución: Incluir
Authorization o no tiene el esquema Bearer.Authorization: Bearer <token> en todas las peticiones protegidas.401 — Token inválido o expirado
401 — Token inválido o expirado
El token está malformado, fue firmado con una clave diferente, o su tiempo de vida ha expirado.Solución: Realizar un nuevo login para obtener un token fresco.
500 — JWT_SECRET no configurado
500 — JWT_SECRET no configurado
El servidor no tiene definida la variable de entorno Solución: Definir
JWT_SECRET. Este es un error de configuración del entorno.JWT_SECRET en las variables de entorno del servidor y reiniciarlo.Control de acceso por rol
Algunos endpoints están restringidos al rolAdmin. El middleware verificarRol se aplica sobre esas rutas y comprueba el campo rol dentro del payload del token.
Flujo del middleware verificarRol
Verificar token
El middleware
verificarToken valida la firma del JWT y adjunta el payload decodificado al objeto de petición como req.usuario.Verificar rol
El middleware
verificarRol(['Admin']) comprueba que req.usuario.rol esté incluido en la lista de roles permitidos.