fix: remover setTimeout do magic link redirect para evitar race condition com ProtectedRoute

This commit is contained in:
guisilvagomes 2025-10-29 11:50:23 -03:00
parent e70d8a654f
commit c5461858b0

View File

@ -92,43 +92,47 @@ export default function AuthCallback() {
setMessage("Autenticado com sucesso! Redirecionando..."); setMessage("Autenticado com sucesso! Redirecionando...");
toast.success("Login realizado com sucesso!"); toast.success("Login realizado com sucesso!");
// Redirecionar baseado no contexto salvo ou role do usuário // Verificar se há redirecionamento salvo do magic link
setTimeout(() => { const savedRedirect = localStorage.getItem("magic_link_redirect");
// Verificar se há redirecionamento salvo do magic link
const savedRedirect = localStorage.getItem("magic_link_redirect");
console.log("[AuthCallback] Verificando redirecionamento:"); console.log("[AuthCallback] Verificando redirecionamento:");
console.log(" - magic_link_redirect:", savedRedirect); console.log(" - magic_link_redirect:", savedRedirect);
console.log(" - user role:", session.user.user_metadata?.role); console.log(" - user role:", session.user.user_metadata?.role);
console.log(" - localStorage keys:", Object.keys(localStorage)); console.log(" - localStorage keys:", Object.keys(localStorage));
if (savedRedirect) { if (savedRedirect) {
console.log("[AuthCallback] ✅ Redirecionando para (saved):", savedRedirect); console.log("[AuthCallback] ✅ Redirecionando para (saved):", savedRedirect);
localStorage.removeItem("magic_link_redirect"); // Limpar após uso localStorage.removeItem("magic_link_redirect"); // Limpar após uso
navigate(savedRedirect, { replace: true });
return;
}
// Fallback: redirecionar baseado no role // Usar window.location.href para forçar reload completo e atualizar AuthContext
const userRole = session.user.user_metadata?.role || "paciente"; window.location.href = savedRedirect;
console.log("[AuthCallback] ⚠️ Nenhum redirect salvo, usando role:", userRole); return;
}
switch (userRole) { // Fallback: redirecionar baseado no role
case "medico": const userRole = session.user.user_metadata?.role || "paciente";
console.log("[AuthCallback] Navegando para /painel-medico"); console.log("[AuthCallback] ⚠️ Nenhum redirect salvo, usando role:", userRole);
navigate("/painel-medico", { replace: true });
break; let redirectUrl = "/acompanhamento"; // default paciente
case "secretaria":
console.log("[AuthCallback] Navegando para /painel-secretaria"); switch (userRole) {
navigate("/painel-secretaria", { replace: true }); case "medico":
break; console.log("[AuthCallback] Navegando para /painel-medico");
case "paciente": redirectUrl = "/painel-medico";
default: break;
console.log("[AuthCallback] Navegando para /acompanhamento"); case "secretaria":
navigate("/acompanhamento", { replace: true }); console.log("[AuthCallback] Navegando para /painel-secretaria");
break; redirectUrl = "/painel-secretaria";
} break;
}, 1500); case "paciente":
default:
console.log("[AuthCallback] Navegando para /acompanhamento");
redirectUrl = "/acompanhamento";
break;
}
// Usar window.location.href para forçar reload completo
window.location.href = redirectUrl;
} catch (err: any) { } catch (err: any) {
console.error("[AuthCallback] Erro:", err); console.error("[AuthCallback] Erro:", err);
setStatus("error"); setStatus("error");