'use client'; import { useEffect, useRef } from 'react'; import { signOut } from 'next-auth/react'; function clearAuthCookies() { // Clear next-auth v5 (Auth.js) and v4 session cookies directly const cookieNames = [ 'authjs.session-token', '__Secure-authjs.session-token', 'authjs.callback-url', 'authjs.csrf-token', 'next-auth.session-token', '__Secure-next-auth.session-token', 'next-auth.callback-url', 'next-auth.csrf-token', ]; cookieNames.forEach((name) => { document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`; document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${window.location.hostname}`; }); } export default function LogoutPage() { const hasStarted = useRef(false); useEffect(() => { if (hasStarted.current) return; hasStarted.current = true; // Ensure logout flag is set (prevents TokenSync and PresenceProvider from restoring tokens) localStorage.setItem('isLoggingOut', 'true'); // Clear localStorage tokens localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); localStorage.removeItem('user'); // Clear auth cookies directly as a robust backup clearAuthCookies(); const redirectToLogin = () => { clearAuthCookies(); // Clear the logout flag right before redirecting localStorage.removeItem('isLoggingOut'); window.location.href = '/login'; }; // Sign out via NextAuth (clears session cookie), then manually redirect signOut({ redirect: false }) .then(redirectToLogin) .catch(redirectToLogin); // Safety fallback - if signOut hangs, redirect after 3 seconds setTimeout(redirectToLogin, 3000); }, []); return (
Please wait while we securely log you out...