diff --git a/src/auth/AuthContext.jsx b/src/auth/AuthContext.jsx index ed7accf..b8a4133 100644 --- a/src/auth/AuthContext.jsx +++ b/src/auth/AuthContext.jsx @@ -534,16 +534,22 @@ export function AuthProvider({ children }) { setAuthFromTokens(t); scheduleAutoRefresh(); - const w = await whoami(t.access_token); - if (!w.ok || !w.authenticated) { - setAnon("SSO login desynced. Please login again."); - cleanupAuthUrl(); - return { ok: false, reason: "whoami_failed" }; - } + try { + const w = await whoami(t.access_token); + if (!w.ok || !w.authenticated) { + setAnon("SSO login desynced. Please login again."); + cleanupAuthUrl(); + return { ok: false, reason: "whoami_failed" }; + } - setUser(w.username ? { username: w.username } : null); - setStatus("auth"); - await refreshProfile(t.access_token); + setUser(w.username ? { username: w.username } : null); + setStatus("auth"); + await refreshProfile(t.access_token); + } catch (err) { + console.error("[Auth] Post-SSO verification failed:", err); + // Still set as authenticated since we have tokens + setStatus("auth"); + } cleanupAuthUrl(); return { ok: true }; @@ -645,9 +651,16 @@ export function AuthProvider({ children }) { useEffect(() => { if (hasKeycloakCallbackParams()) { - completeKeycloakLogin(); + completeKeycloakLogin().catch((err) => { + console.error("[Auth] SSO callback error:", err); + setAnon("SSO failed unexpectedly. Please try again."); + cleanupAuthUrl(); + }); } else { - restore(); + restore().catch((err) => { + console.error("[Auth] Restore error:", err); + setAnon(""); + }); } const onStorage = (e) => { if (e.key === "sociowire:auth") restore();