diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-04-28 02:13:30 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-04-28 02:13:30 +0000 |
| commit | ef4c533ebacc2cdc97e518f30e9a9350004fcdfb (patch) | |
| tree | 345251a3ed0f4429716fa5edaa31024d8f4cb560 /middleware.ts | |
| parent | 9ceed79cf32c896f8a998399bf1b296506b2cd4a (diff) | |
~20250428 작업사항
Diffstat (limited to 'middleware.ts')
| -rw-r--r-- | middleware.ts | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/middleware.ts b/middleware.ts index 84ee2313..88d30b2d 100644 --- a/middleware.ts +++ b/middleware.ts @@ -14,6 +14,8 @@ acceptLanguage.languages(languages); const publicPaths = [ '/evcp', '/partners', + '/partners/repository', + '/partners/signup', '/api/auth', ]; @@ -25,7 +27,7 @@ function isPublicPath(path: string, lng: string) { } // 2. auth API는 별도 처리 - if (path.startsWith('/api/auth')) { + if (path.includes('/api/auth')) { return true; } @@ -109,7 +111,7 @@ export async function middleware(request: NextRequest) { /** * 6. 인증된 사용자의 도메인-URL 일치 확인 및 리다이렉션 */ - if (token && token.domain) { + if (token && token.domain && !isPublicPath(pathname, detectedLng)) { // 사용자의 domain과 URL 경로가 일치하는지 확인 const redirectPath = getDomainRedirectPath(pathname, token.domain as string, detectedLng); @@ -122,6 +124,28 @@ export async function middleware(request: NextRequest) { } /** + * 6.5 이미 로그인한 사용자가 로그인 페이지에 접근할 경우 대시보드로 리다이렉트 + */ +if (token) { + // 로그인 페이지 경로 확인 (정확한 /ko/evcp 또는 /en/partners 등) + const isEvcpLoginPage = pathname === `/${detectedLng}/evcp`; + const isPartnersLoginPage = pathname === `/${detectedLng}/partners`; + + if (isEvcpLoginPage) { + // EVCP 로그인 페이지에 접근한 경우 report 페이지로 리다이렉트 + const redirectUrl = new URL(`/${detectedLng}/evcp/report`, origin); + redirectUrl.search = searchParams.toString(); + return NextResponse.redirect(redirectUrl); + } else if (isPartnersLoginPage) { + // Partners 로그인 페이지에 접근한 경우 dashboard 페이지로 리다이렉트 + const redirectUrl = new URL(`/${detectedLng}/partners/dashboard`, origin); + redirectUrl.search = searchParams.toString(); + return NextResponse.redirect(redirectUrl); + } +} + + + /** * 7. 인증 확인: 공개 경로가 아닌 경우 로그인 체크 및 리다이렉트 */ if (!isPublicPath(pathname, detectedLng)) { @@ -138,7 +162,7 @@ export async function middleware(request: NextRequest) { // 로그인 후 원래 페이지로 리다이렉트하기 위해 callbackUrl 추가 const redirectUrl = new URL(loginPath, origin); - redirectUrl.searchParams.set('callbackUrl', request.url); + redirectUrl.searchParams.set('callbackUrl', request.nextUrl.pathname + request.nextUrl.search); return NextResponse.redirect(redirectUrl); } @@ -165,6 +189,6 @@ export async function middleware(request: NextRequest) { */ export const config = { matcher: [ - '/((?!_next|.*\\..*|api/(?!auth)).*)', + '/((?!_next|.*\\..*|api).*)', // API 경로 전체 제외 ], };
\ No newline at end of file |
