From 3d2171e0bb067d4b116f5ed61bcbbcd7e2d2ae80 Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Wed, 18 Feb 2026 00:50:38 +0530 Subject: [PATCH] feat: Introduce a dedicated logout page for consistent token and session invalidation across the application. --- src/app/logout/page.tsx | 30 ++++++++++++++++++++++++++++++ src/middleware.ts | 2 +- src/services/api.ts | 5 +++-- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 src/app/logout/page.tsx diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx new file mode 100644 index 0000000..943a426 --- /dev/null +++ b/src/app/logout/page.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { useEffect } from 'react'; +import { signOut } from 'next-auth/react'; + +export default function LogoutPage() { + useEffect(() => { + // Clear localStorage tokens + localStorage.removeItem('accessToken'); + localStorage.removeItem('refreshToken'); + localStorage.removeItem('user'); + + // Sign out via NextAuth (clears session cookie) and redirect to login + signOut({ callbackUrl: '/login', redirect: true }); + }, []); + + return ( +
+
+
+

+ Signing Out +

+

+ Please wait while we securely log you out... +

+
+
+ ); +} diff --git a/src/middleware.ts b/src/middleware.ts index 256cca4..b0a3aec 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -5,7 +5,7 @@ import { NextResponse } from "next/server"; const authRoutes = ["/login", "/signup", "/forgot-password", "/reset-password", "/verify-email"]; // Public routes - accessible to everyone (logged in or not) -const publicRoutes = ["/", "/contact", "/about", "/faq", "/user/dashboard", "/user/profiles", "/user/profile"]; +const publicRoutes = ["/", "/contact", "/about", "/faq", "/logout", "/user/dashboard", "/user/profiles", "/user/profile"]; export default auth((req) => { const { nextUrl } = req; diff --git a/src/services/api.ts b/src/services/api.ts index 4a4b179..26240ad 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -28,7 +28,7 @@ let failedQueue: Array<{ config: InternalAxiosRequestConfig; }> = []; -// Force logout: clear all tokens and redirect to login +// Force logout: clear all tokens and redirect to logout page const forceLogout = () => { if (isLoggingOut) return; // Prevent multiple redirects isLoggingOut = true; @@ -36,7 +36,8 @@ const forceLogout = () => { localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); localStorage.removeItem('user'); - window.location.href = '/api/auth/signout?callbackUrl=/login'; + // Redirect to /logout page which properly clears NextAuth session + window.location.href = '/logout'; } };