From 05ffdf787643910f70c05404df00c0f3cad3cb2c Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Thu, 16 Oct 2025 16:09:49 -0300 Subject: [PATCH] =?UTF-8?q?auth:=20evitar=20loop=20login<->dashboard=20par?= =?UTF-8?q?a=20sess=C3=A3o=20de=20m=C3=A1quina\n\n-=20Login=20direciona=20?= =?UTF-8?q?m=C3=A1quina=20para=20portal=20(ou=20dashboard=20se=20manager)\?= =?UTF-8?q?n-=20Middleware=20redireciona=20m=C3=A1quina=20colaborador=20do?= =?UTF-8?q?=20dashboard=20para=20/portal/tickets\n-=20Middleware=20evita?= =?UTF-8?q?=20mostrar=20login=20quando=20j=C3=A1=20autenticado=20como=20m?= =?UTF-8?q?=C3=A1quina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- middleware.ts | 18 ++++++++++++++++++ src/app/login/login-page-client.tsx | 12 +++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/middleware.ts b/middleware.ts index e35a30e..620918d 100644 --- a/middleware.ts +++ b/middleware.ts @@ -34,6 +34,24 @@ export async function middleware(request: NextRequest) { } const role = (session.user as { role?: string })?.role?.toLowerCase() ?? "agent" + const machinePersona = + role === "machine" + ? ((session.user as unknown as { machinePersona?: string }).machinePersona ?? "").toLowerCase() + : null + + // Ajusta destinos conforme persona da máquina para evitar loops login<->dashboard + if (role === "machine") { + // Evita enviar colaborador ao dashboard; redireciona para o Portal + if (pathname.startsWith("/dashboard") && machinePersona !== "manager") { + return NextResponse.redirect(new URL("/portal/tickets", request.url)) + } + // Evita mostrar login quando já há sessão de máquina + if (pathname === "/login") { + const target = machinePersona === "manager" ? "/dashboard" : "/portal/tickets" + const url = new URL(target, request.url) + return NextResponse.redirect(url) + } + } const isAdmin = role === "admin" // Em desenvolvimento, evitamos bloquear rotas admin por possíveis diferenças diff --git a/src/app/login/login-page-client.tsx b/src/app/login/login-page-client.tsx index dbd2c59..758c905 100644 --- a/src/app/login/login-page-client.tsx +++ b/src/app/login/login-page-client.tsx @@ -25,7 +25,17 @@ export function LoginPageClient() { useEffect(() => { if (isPending) return if (!session?.user) return - const destination = callbackUrl ?? "/dashboard" + const role = (session.user.role ?? "").toLowerCase() + const persona = (session.user as any).machinePersona + ? String((session.user as any).machinePersona).toLowerCase() + : null + const defaultDest = + role === "machine" + ? persona === "manager" + ? "/dashboard" + : "/portal/tickets" + : "/dashboard" + const destination = callbackUrl ?? defaultDest router.replace(destination) }, [callbackUrl, isPending, router, session?.user])