auth: evitar loop login<->dashboard para sessão de máquina\n\n- Login direciona máquina para portal (ou dashboard se manager)\n- Middleware redireciona máquina colaborador do dashboard para /portal/tickets\n- Middleware evita mostrar login quando já autenticado como máquina

This commit is contained in:
Esdras Renan 2025-10-16 16:09:49 -03:00
parent f2e25dfe4d
commit 05ffdf7876
2 changed files with 29 additions and 1 deletions

View file

@ -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

View file

@ -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])