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:
parent
f2e25dfe4d
commit
05ffdf7876
2 changed files with 29 additions and 1 deletions
|
|
@ -34,6 +34,24 @@ export async function middleware(request: NextRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const role = (session.user as { role?: string })?.role?.toLowerCase() ?? "agent"
|
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"
|
const isAdmin = role === "admin"
|
||||||
// Em desenvolvimento, evitamos bloquear rotas admin por possíveis diferenças
|
// Em desenvolvimento, evitamos bloquear rotas admin por possíveis diferenças
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,17 @@ export function LoginPageClient() {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isPending) return
|
if (isPending) return
|
||||||
if (!session?.user) 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)
|
router.replace(destination)
|
||||||
}, [callbackUrl, isPending, router, session?.user])
|
}, [callbackUrl, isPending, router, session?.user])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue