diff --git a/apps/cs/app/api/auth/logout/route.ts b/apps/cs/app/api/auth/logout/route.ts new file mode 100644 index 000000000..fdcc9df7c --- /dev/null +++ b/apps/cs/app/api/auth/logout/route.ts @@ -0,0 +1,17 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; +import { + ACCESS_TOKEN, + AUTH_USER_ID, + CLAIM_NAME, + REFRESH_TOKEN, +} from "@/shared/config"; + +export async function POST() { + const cookieStore = await cookies(); + cookieStore.delete(ACCESS_TOKEN); + cookieStore.delete(REFRESH_TOKEN); + cookieStore.delete(AUTH_USER_ID); + cookieStore.delete(CLAIM_NAME); + return NextResponse.json({ message: "Logged out" }, { status: 200 }); +} diff --git a/packages/common/components/src/ui/header/index.tsx b/packages/common/components/src/ui/header/index.tsx index ce9419ef1..433435009 100644 --- a/packages/common/components/src/ui/header/index.tsx +++ b/packages/common/components/src/ui/header/index.tsx @@ -52,6 +52,18 @@ export function Header({ viewOnly }: { viewOnly?: boolean }) { queryFn: () => getUserPopupList(), }); + const logout = async () => { + try { + const response = await fetch("/api/auth/logout", { + method: "POST", + }); + if (!response.ok) throw new Error("Failed to logout"); + window.location.href = "/auth/login"; + } catch (error) { + console.error(error); + } + }; + const openPopup = useCallback(async (popup: Popup) => { try { const cookieName = `cs-popup-hide-for-day-${popup.popupSn}`; @@ -139,7 +151,7 @@ export function Header({ viewOnly }: { viewOnly?: boolean }) {

접속 IP

- 로그아웃 + 로그아웃