diff --git a/src/hooks/use-auth/use-auth-login/index.ts b/src/hooks/use-auth/use-auth-login/index.ts index 31e9c4d3..3c984806 100644 --- a/src/hooks/use-auth/use-auth-login/index.ts +++ b/src/hooks/use-auth/use-auth-login/index.ts @@ -1,6 +1,6 @@ 'use client'; -import { useRouter, useSearchParams } from 'next/navigation'; +import { useSearchParams } from 'next/navigation'; import { useCallback, useState } from 'react'; @@ -48,7 +48,6 @@ const isCommonErrorResponse = (e: unknown): e is CommonErrorResponse => { }; export const useLogin = () => { - const router = useRouter(); const searchParams = useSearchParams(); const [loginError, setLoginError] = useState(null); @@ -75,7 +74,7 @@ export const useLogin = () => { setIsAuthenticated(true); const nextPath = normalizePath(searchParams.get('path')); - router.replace(nextPath); + window.location.replace(nextPath); } catch (error) { if (isCommonErrorResponse(error)) { console.error('[LOGIN ERROR]', error.errorCode, error.detail); diff --git a/src/middleware.ts b/src/proxy.ts similarity index 58% rename from src/middleware.ts rename to src/proxy.ts index c62c47a5..4c6135e0 100644 --- a/src/middleware.ts +++ b/src/proxy.ts @@ -1,22 +1,27 @@ import { NextRequest, NextResponse } from 'next/server'; -export const middleware = (request: NextRequest) => { - // const accessToken = request.cookies.get('accessToken'); +export const proxy = (request: NextRequest) => { + const accessToken = request.cookies.get('accessToken'); const refreshToken = request.cookies.get('refreshToken'); const protectedPaths = ['/mypage', '/create-group', '/message', '/schedule', '/notification']; const isProtected = protectedPaths.some((path) => request.nextUrl.pathname.startsWith(path)); + const publicPaths = ['/login', '/signup']; + const isPublic = publicPaths.some((path) => request.nextUrl.pathname.startsWith(path)); + + // 인증된 사용자가 public 페이지 접근 시 홈으로 + if (isPublic && (accessToken || refreshToken)) { + return NextResponse.redirect(new URL('/', request.url)); + } + // 보호되지 않은 경로는 그냥 통과 if (!isProtected) { return NextResponse.next(); } - console.log(`refreshToken 보유 여부`); - console.log(refreshToken); - // 둘 다 없으면 로그인 페이지로 redirect - if (!refreshToken) { + if (!accessToken && !refreshToken) { const loginUrl = new URL('/login', request.url); loginUrl.searchParams.set('error', 'unauthorized'); loginUrl.searchParams.set('path', request.nextUrl.pathname); @@ -27,5 +32,5 @@ export const middleware = (request: NextRequest) => { }; export const config = { - matcher: ['/((?!api|_next/static|_next/image|favicon.ico|login|signup).*)'], + matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'], };