From 17727243be3c56aa5e6c6d32b289e6d528bedb80 Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 18 Dec 2025 21:45:27 +0100 Subject: [PATCH] feat: add global auth listener with hard reload on logout --- src/app/layout.tsx | 2 ++ src/components/AuthListener.tsx | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/components/AuthListener.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b22fb4f..1fba40e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -8,6 +8,7 @@ import { I18nProvider } from "@/i18n/I18nContext"; import { SessionProvider } from "@/context/SessionContext"; import ActiveSessionBanner from "@/components/ActiveSessionBanner"; import MainContentWrapper from "@/components/MainContentWrapper"; +import AuthListener from "@/components/AuthListener"; const inter = Inter({ subsets: ["latin"] }); @@ -46,6 +47,7 @@ export default function RootLayout({ + diff --git a/src/components/AuthListener.tsx b/src/components/AuthListener.tsx new file mode 100644 index 0000000..c698366 --- /dev/null +++ b/src/components/AuthListener.tsx @@ -0,0 +1,28 @@ +'use client'; + +import { useEffect } from 'react'; +import { createClientComponentClient } from '@supabase/auth-helpers-nextjs'; + +export default function AuthListener() { + const supabase = createClientComponentClient(); + + useEffect(() => { + // Listener für Auth-Status Änderungen + const { + data: { subscription }, + } = supabase.auth.onAuthStateChange((event) => { + if (event === 'SIGNED_OUT') { + console.log(`[Auth] Event ${event} detected, forcing reload...`); + // Zwinge den Browser zum kompletten Neuladen, um Caches zu leeren + // Wir nutzen window.location.href statt router.push für einen harten Reload + window.location.href = '/'; + } + }); + + return () => { + subscription.unsubscribe(); + }; + }, [supabase]); + + return null; +}