diff --git a/src/layouts/DashboardLayout.astro b/src/layouts/DashboardLayout.astro index d3bc186..640950e 100644 --- a/src/layouts/DashboardLayout.astro +++ b/src/layouts/DashboardLayout.astro @@ -184,12 +184,10 @@ function isActive(item: { href: string; exact?: boolean }) {
-
- -
+
@@ -202,6 +200,13 @@ function isActive(item: { href: string; exact?: boolean }) { document.cookie = 'currentTeamId=' + teamSwitcher.value + '; path=/'; window.location.reload(); }); + + // Logout - invalidate session via fetch, then redirect + const logoutBtn = document.getElementById('logout-btn'); + logoutBtn?.addEventListener('click', async () => { + await fetch('/api/auth/logout', { method: 'POST' }); + window.location.href = '/'; + }); diff --git a/src/pages/api/auth/logout.ts b/src/pages/api/auth/logout.ts index f9a23c4..e9cefe9 100644 --- a/src/pages/api/auth/logout.ts +++ b/src/pages/api/auth/logout.ts @@ -1,11 +1,11 @@ import type { APIRoute } from 'astro'; import { invalidateSession } from '../../../lib/auth'; -export const POST: APIRoute = async ({ cookies, redirect }) => { +export const POST: APIRoute = async ({ cookies }) => { const sessionId = cookies.get('session_id')?.value; if (sessionId) { await invalidateSession(sessionId); cookies.delete('session_id', { path: '/' }); } - return redirect('/login'); + return new Response(null, { status: 200 }); };