fix(auth): don't redirect from dashboard until SDK boot completes

AuthGate redirected to /portal/login whenever status !== authenticated, which
during boot (before restore() resolves) dropped a valid session on reload. Gate
the redirect on useAppShell().ready so we only bounce once auth has resolved.
This commit is contained in:
tanweer919
2026-07-13 02:35:13 +05:30
parent 5186497c50
commit 64be4b9b3f
+10 -5
View File
@@ -2,7 +2,7 @@
import { useEffect } from "react"; import { useEffect } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useAuth } from "@abe-kap/appshell-sdk/react"; import { useAuth, useAppShell } from "@abe-kap/appshell-sdk/react";
import { isShellConfigured } from "@/lib/appshell"; import { isShellConfigured } from "@/lib/appshell";
/** /**
@@ -14,16 +14,21 @@ import { isShellConfigured } from "@/lib/appshell";
export function AuthGate({ children }: { children: React.ReactNode }) { export function AuthGate({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
const { status } = useAuth(); const { status } = useAuth();
const { ready } = useAppShell();
const shell = isShellConfigured(); const shell = isShellConfigured();
useEffect(() => { useEffect(() => {
if (shell && status === "unauthenticated") router.replace("/portal/login"); // Only bounce to login once the SDK has finished booting AND restore() has
}, [shell, status, router]); // resolved to unauthenticated. Redirecting while boot is still in flight would
// drop a perfectly valid session on reload (the status is transiently not-yet
// "authenticated" during boot).
if (shell && ready && status === "unauthenticated") router.replace("/portal/login");
}, [shell, ready, status, router]);
if (shell && status !== "authenticated") { if (shell && (!ready || status !== "authenticated")) {
return ( return (
<div style={{ minHeight: "60vh", display: "grid", placeItems: "center", color: "var(--muted, #888)" }}> <div style={{ minHeight: "60vh", display: "grid", placeItems: "center", color: "var(--muted, #888)" }}>
{status === "loading" ? "Loading your workspace…" : "Redirecting to sign in…"} {ready && status === "unauthenticated" ? "Redirecting to sign in…" : "Loading your workspace…"}
</div> </div>
); );
} }