Guest User

Untitled

a guest
Jan 16th, 2024
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.79 KB | Source Code | 0 0
  1. import { NextResponse } from "next/server";
  2. import type { NextRequest } from "next/server";
  3. import createMiddleware from "next-intl/middleware";
  4. import { locales, localePrefix, pathnames } from "./navigation";
  5. const jwt = require("jsonwebtoken");
  6.  
  7. // Función para verificar si el usuario es válido
  8. function esUsuarioValido(token: string): boolean {
  9.   try {
  10.     const secret = process.env.JWT_SECRET;
  11.     if (!secret) {
  12.       console.error("La clave secreta JWT no está definida.");
  13.       return false;
  14.     }
  15.  
  16.     const decoded = jwt.verify(token, secret);
  17.     return !!decoded.isAdmin;
  18.   } catch (err) {
  19.     console.error("Error al verificar el token:", err);
  20.     return false;
  21.   }
  22. }
  23.  
  24. // Middleware de autenticación
  25. export function authMiddleware(request: NextRequest) {
  26.   // Verificar si la ruta es parte de las rutas de administración
  27.   if (request.nextUrl.pathname.startsWith("/es/admin")) {
  28.     const token = request.cookies.get("jwt") as unknown as string;
  29.  
  30.     if (!token) {
  31.       console.error("No se encontró el token JWT en las cookies.");
  32.       return NextResponse.redirect(new URL("/login", request.url));
  33.     }
  34.  
  35.     if (!esUsuarioValido(token)) {
  36.       console.error("Token JWT inválido o el usuario no es administrador.");
  37.       return NextResponse.redirect(new URL("/login", request.url));
  38.     }
  39.  
  40.     // Autenticación exitosa, permitir acceso a la ruta
  41.     return NextResponse.next();
  42.   }
  43.  
  44.   // Para rutas que no sean de administración, se permite el acceso normal
  45.   return NextResponse.next();
  46. }
  47.  
  48. export const config = {
  49.   // Combina los matchers de ambos middlewares
  50.   matcher: ["/admin", "/(en|es|ar|fr)/:path*"],
  51. };
  52.  
  53. // Combina los middlewares
  54.  
  55. export default createMiddleware({
  56.   locales,
  57.   localePrefix,
  58.   defaultLocale: "en",
  59.   pathnames,
  60. });
  61.  
Advertisement
Add Comment
Please, Sign In to add comment