From c012f3b5c454121a547fe54e6ecbd6e11b465730 Mon Sep 17 00:00:00 2001 From: Prasanna721 <106952318+Prasanna721@users.noreply.github.com> Date: Fri, 3 Apr 2026 01:55:24 +0000 Subject: [PATCH] fix stale session cookie (#823) - redirect to login when session is gone instead of blank screen - show cached username while session restores so header doesn't flicker - cleaned up redundant type casts and unused vars --- apps/web/components/ensure-workspace.tsx | 10 ++++++++-- apps/web/components/header.tsx | 14 ++++++++------ packages/lib/auth-context.tsx | 8 +++----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/apps/web/components/ensure-workspace.tsx b/apps/web/components/ensure-workspace.tsx index a9bd8823..370d5ca0 100644 --- a/apps/web/components/ensure-workspace.tsx +++ b/apps/web/components/ensure-workspace.tsx @@ -10,8 +10,14 @@ export function EnsureWorkspace({ children }: { children: React.ReactNode }) { const { session, organizations, isRestoring } = useAuth() useEffect(() => { - if (!session) return - if (isRestoring || organizations === null) return + if (isRestoring) return + if (!session) { + router.replace( + `/login?redirect=${encodeURIComponent(window.location.href)}`, + ) + return + } + if (organizations === null) return if (organizations.length > 0) return if (pathname.startsWith("/onboarding")) return router.replace("/onboarding/welcome?step=input") diff --git a/apps/web/components/header.tsx b/apps/web/components/header.tsx index 38c5c68c..a66626b0 100644 --- a/apps/web/components/header.tsx +++ b/apps/web/components/header.tsx @@ -34,7 +34,7 @@ import { useIsMobile } from "@hooks/use-mobile" import { useLocalStorageUsername } from "@hooks/use-local-storage-username" import { UserProfileMenu } from "@/components/user-profile-menu" import { FeedbackModal } from "./feedback-modal" -import { useViewMode } from "@/lib/view-mode-context" +import { useViewMode, type ViewMode } from "@/lib/view-mode-context" import { useQueryState } from "nuqs" import { feedbackParam } from "@/lib/search-params" @@ -45,7 +45,7 @@ interface HeaderProps { } export function Header({ onAddMemory, onOpenChat, onOpenSearch }: HeaderProps) { - const { user } = useAuth() + const { user, isRestoring } = useAuth() const { selectedProjects, setSelectedProjects } = useProject() const router = useRouter() const isMobile = useIsMobile() @@ -53,14 +53,16 @@ export function Header({ onAddMemory, onOpenChat, onOpenSearch }: HeaderProps) { "feedback", feedbackParam, ) - const isFeedbackOpen = feedbackOpen ?? false const { viewMode, setViewMode } = useViewMode() const handleFeedback = () => setFeedbackOpen(true) const localStorageUsername = useLocalStorageUsername() const displayName = - user?.displayUsername || localStorageUsername || user?.name || "" + user?.displayUsername || + (isRestoring ? localStorageUsername : "") || + user?.name || + "" const userName = displayName ? `${displayName.split(" ")[0]}'s` : "My" return (