Middleware de token
Este middleware se encarga de verificar y autenticar el token JWT enviado por el cliente en las cabeceras de la solicitud. Si el token es válido, extrae la información del usuario y la adjunta al objeto req
para su uso en otros middlewares o controladores.
🔍 Ubicación
src/middleware/token.middleware.ts
📌 Propósito
Proteger rutas que requieren autenticación validando el token JWT. Si el token es válido, el usuario autenticado se añade al request (req.user
).
📥 Importaciones
import { Request, Response, NextFunction } from "express";
import { verificarToken } from "../services/token.service";
verificarToken
: función importada desdetoken.service.ts
que valida y decodifica el token JWT.
🧠 Tipado extendido
export interface AuthenticatedRequest extends Request {
user?: any;
}
- Se extiende la interfaz
Request
de Express para incluir un campouser
, donde se almacena la información del usuario extraída del token.
🚦 Middleware principal
export function autenticarToken(req: AuthenticatedRequest, res: Response, next: NextFunction)
Descripción del flujo
- Se extrae el token desde el encabezado
Authorization
, en formatoBearer <token>
. - Si no hay token, se responde con error 401.
- Si hay token, se verifica mediante
verificarToken(token)
. - Si el token es válido, la información del usuario se guarda en
req.user
. - Si el token es inválido o ha expirado, se responde con error 403.
✅ Ejemplo de uso
import { autenticarToken } from "../middleware/token.middleware";
router.get("/perfil", autenticarToken, perfilController.obtenerPerfil);
📤 Cabecera esperada
Authorization: Bearer <token JWT>
⚠️ Respuestas de error posibles
Código | Mensaje | Situación |
---|---|---|
401 | "Token no proporcionado" | No se envió un token en la cabecera. |
403 | "Token inválido o expirado" | El token es inválido o ha expirado. |
🧩 Dependencias
Este middleware depende de:
token.service.ts
→ funciónverificarToken(token: string): any
🧪 Notas técnicas
- El campo
req.user
es utilizado por otros middlewares comoroles.middleware.ts
para controlar permisos. - Este middleware debe colocarse antes de cualquier middleware o controlador que requiera información del usuario autenticado.