Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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) {
- console.error("No se encontró el token JWT en las cookies.");
- return NextResponse.redirect(new URL("/login", request.url));
- }
- if (!esUsuarioValido(token)) {
- console.error("Token JWT inválido o el usuario no es administrador.");
- 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,
- });
Advertisement
Add Comment
Please, Sign In to add comment