diff --git a/src/app/api/member/logout/route.ts b/src/app/api/member/logout/route.ts index 8670cbf7..e08210f6 100644 --- a/src/app/api/member/logout/route.ts +++ b/src/app/api/member/logout/route.ts @@ -6,6 +6,7 @@ import { NextResponse } from 'next/server'; export async function POST() { const cookieStore = await cookies(); const accessToken = cookieStore.get(COOKIES_KEYS.ACCESS_TOKEN)?.value; + let logoutFailed = false; try { if (accessToken) { @@ -15,11 +16,26 @@ export async function POST() { } } catch (error) { console.warn('Backend logout failed', error); - } finally { - cookieStore.delete(COOKIES_KEYS.ACCESS_TOKEN); - cookieStore.delete(COOKIES_KEYS.REFRESH_TOKEN); - cookieStore.delete(COOKIES_KEYS.USER_INFO); + logoutFailed = true; } - return NextResponse.json({ success: true }); + const response = NextResponse.json( + { success: !logoutFailed }, + { status: logoutFailed ? 502 : 200 } + ); + + const isProd = process.env.NODE_ENV === 'production'; + + const cookieOptions = { + path: '/', + ...(process.env.COOKIE_DOMAIN ? { domain: process.env.COOKIE_DOMAIN } : {}), // 환경변수 기반 + expires: new Date(0), + sameSite: 'lax' as const, + }; + + response.cookies.set(COOKIES_KEYS.ACCESS_TOKEN, '', cookieOptions); + response.cookies.set(COOKIES_KEYS.REFRESH_TOKEN, '', cookieOptions); + response.cookies.set(COOKIES_KEYS.USER_INFO, '', cookieOptions); + + return response; } diff --git a/src/hooks/useLogout.ts b/src/hooks/useLogout.ts index 98236a82..632cccbc 100644 --- a/src/hooks/useLogout.ts +++ b/src/hooks/useLogout.ts @@ -1,22 +1,30 @@ -'use client'; - import { logout } from '@/apis/authApi'; +import { COOKIES_KEYS } from '@/lib/constants/cookies'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; +import { deleteCookieUtil } from './useCookie'; + export function useLogout() { const router = useRouter(); const queryClient = useQueryClient(); + const clearCookies = () => { + deleteCookieUtil(COOKIES_KEYS.ACCESS_TOKEN); + deleteCookieUtil(COOKIES_KEYS.REFRESH_TOKEN); + deleteCookieUtil(COOKIES_KEYS.USER_INFO); + }; + return useMutation({ mutationFn: logout, onSuccess: () => { + clearCookies(); queryClient.clear(); router.push('/'); }, onError: () => { + clearCookies(); queryClient.clear(); - // 에러가 나도 로그인 페이지로 이동 router.push('/'); }, });