Files
frontend/src/app/logout/page.tsx

42 lines
1.4 KiB
TypeScript
Raw Normal View History

'use client';
import { useEffect, useRef } from 'react';
import { signOut } from 'next-auth/react';
export default function LogoutPage() {
const hasStarted = useRef(false);
useEffect(() => {
if (hasStarted.current) return;
hasStarted.current = true;
// Set logout flag to prevent TokenSync/PresenceProvider from restoring tokens
localStorage.setItem('isLoggingOut', 'true');
// Clear all localStorage auth data
localStorage.removeItem('accessToken');
localStorage.removeItem('refreshToken');
localStorage.removeItem('user');
// Use signOut with callbackUrl - this ensures the server clears the
// session cookie BEFORE the redirect happens (server-side 302).
// Do NOT use redirect:false + manual redirect, as that causes a race
// condition where navigation happens before the cookie is cleared.
signOut({ callbackUrl: '/login' });
}, []);
return (
<div className="min-h-screen flex items-center justify-center bg-white">
<div className="text-center">
<div className="w-12 h-12 border-4 border-[#e58625] border-t-transparent rounded-full animate-spin mx-auto mb-6" />
<h1 className="font-fractul font-bold text-[24px] text-[#00293D] mb-2">
Signing Out
</h1>
<p className="font-serif text-[14px] text-[#00293D]/60">
Please wait while we securely log you out...
</p>
</div>
</div>
);
}