Next.js Discord

Discord Forum

Middleware for admin doesnt work or apply, meanwhile the one for next-intl yes.

Unanswered
West African Lion posted this in #help-forum
Open in Discord
West African LionOP
Am i doing something wrong ? whenever i acces /es/admin, nothing happens and the admin page shows.
`
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import createMiddleware from "next-intl/middleware";
import { locales, localePrefix, pathnames } from "./navigation";
const jwt = require("jsonwebtoken");

// Función para verificar si el usuario es válido
function esUsuarioValido(token: string): boolean {
  try {
    const secret = process.env.JWT_SECRET;
    if (!secret) {
      console.error("La clave secreta JWT no está definida.");
      return false;
    }

    const decoded = jwt.verify(token, secret);
    return !!decoded.isAdmin;
  } catch (err) {
    console.error("Error al verificar el token:", err);
    return false;
  }
}

// Middleware de autenticación
export function authMiddleware(request: NextRequest) {
  // Verificar si la ruta es parte de las rutas de administración
  if (request.nextUrl.pathname.startsWith("/es/admin")) {
    const token = request.cookies.get("jwt") as unknown as string;

    if (!token || !esUsuarioValido(token)) {
      return NextResponse.redirect(new URL("/login", request.url));
    }

    // Autenticación exitosa, permitir acceso a la ruta
    return NextResponse.next();
  }

  // Para rutas que no sean de administración, se permite el acceso normal
  return NextResponse.next();
}

export const config = {
  // Combina los matchers de ambos middlewares
  matcher: ["/admin", "/(en|es|ar|fr)/:path*"],
};

// Combina los middlewares

export default createMiddleware({
  locales,
  localePrefix,
  defaultLocale: "en",
  pathnames,
});

1 Reply

West African LionOP