From 39124f0db4d052d0c836964b43f38674f06ddf27 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 18 Feb 2026 12:53:58 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20ux:=20improve=20logout=20flow=20?= =?UTF-8?q?completely?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(safe-mode-page)/auth/logout/page.tsx | 9 --------- app/(safe-mode-page)/auth/logout/route.tsx | 7 +++++++ shared/models/auth/logout.ts | 7 ++++--- shared/widgets/navbar/components/LogoutAlert.tsx | 12 ++++++++++++ 4 files changed, 23 insertions(+), 12 deletions(-) delete mode 100644 app/(safe-mode-page)/auth/logout/page.tsx create mode 100644 app/(safe-mode-page)/auth/logout/route.tsx diff --git a/app/(safe-mode-page)/auth/logout/page.tsx b/app/(safe-mode-page)/auth/logout/page.tsx deleted file mode 100644 index 3d45472..0000000 --- a/app/(safe-mode-page)/auth/logout/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { cookies } from "next/headers"; -import { redirect } from "next/navigation"; - -const page = async () => { - (await cookies()).delete("auth_token"); - redirect("/"); -}; - -export default page; diff --git a/app/(safe-mode-page)/auth/logout/route.tsx b/app/(safe-mode-page)/auth/logout/route.tsx new file mode 100644 index 0000000..d33ed31 --- /dev/null +++ b/app/(safe-mode-page)/auth/logout/route.tsx @@ -0,0 +1,7 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; + +export const GET = async (request: Request) => { + (await cookies()).delete("auth_token"); + return NextResponse.redirect(new URL("/", request.url), 303); +}; diff --git a/shared/models/auth/logout.ts b/shared/models/auth/logout.ts index 92ffd02..4502582 100644 --- a/shared/models/auth/logout.ts +++ b/shared/models/auth/logout.ts @@ -1,8 +1,6 @@ "use server"; import { backendFetch, BackendResponse } from "@/shared/helpers/backendFetch"; -import { cookies } from "next/headers"; -import { redirect } from "next/navigation"; export const logout = async () => { const res = (await backendFetch("auth/logout", { @@ -10,7 +8,10 @@ export const logout = async () => { })) as BackendResponse; if (res.success) { - redirect("/auth/logout"); + return { + success: true, + message: "Logout successful", + }; } else { return { success: false, diff --git a/shared/widgets/navbar/components/LogoutAlert.tsx b/shared/widgets/navbar/components/LogoutAlert.tsx index 9595904..cea86e6 100644 --- a/shared/widgets/navbar/components/LogoutAlert.tsx +++ b/shared/widgets/navbar/components/LogoutAlert.tsx @@ -11,6 +11,7 @@ import { import { Spinner } from "@/shared/libs/shadcn/ui/spinner"; import { logout } from "@/shared/models/auth/logout"; import { Button } from "@base-ui/react"; +import { useRouter } from "next/navigation"; import React from "react"; import { toast } from "sonner"; @@ -21,6 +22,7 @@ const LogoutAlert = ({ openState: boolean; setOpenState: React.Dispatch>; }) => { + const router = useRouter(); const [isLoading, setIsLoading] = React.useState(false); const continueLogout = async () => { setIsLoading(true); @@ -33,6 +35,16 @@ const LogoutAlert = ({ "An error occurred while logging out. Please try again later.", richColors: true, }); + } else { + toast.success(res.message || "Logout successful", { + position: "bottom-right", + description: "You have been logged out successfully.", + richColors: true, + }); + router.push("/auth/logout"); + setTimeout(() => { + window.location.reload(); + }, 2000); } };