diff --git a/apps/web/src/app/login/_hooks/usePostGuestLogin.ts b/apps/web/src/app/login/_hooks/usePostGuestLogin.ts index 2a5254ef..2f7218ec 100644 --- a/apps/web/src/app/login/_hooks/usePostGuestLogin.ts +++ b/apps/web/src/app/login/_hooks/usePostGuestLogin.ts @@ -1,9 +1,10 @@ +import { WEBBRIDGE_MESSAGE_TYPE } from '@piki/core'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { setCookie } from '@/utils/cookie'; import { getLoginRedirectPath } from '@/utils/loginRedirect'; -import { isWebview } from '@/utils/webBridge'; +import { WebBridge, isWebview } from '@/utils/webBridge'; import { postGuestLogin } from '../_apis/postGuestLogin'; @@ -19,6 +20,10 @@ export const usePostGuestLogin = () => { if (isWebview() && data.accessToken && data.refreshToken) { setCookie('access_token', data.accessToken, { minutes: 15 }); setCookie('refresh_token', data.refreshToken, { days: 14 }); + WebBridge.postMessage({ + type: WEBBRIDGE_MESSAGE_TYPE.WEB_REQ_TOKEN_REFRESHED, + payload: { accessToken: data.accessToken, refreshToken: data.refreshToken }, + }); } router.replace(getLoginRedirectPath()); diff --git a/apps/web/src/app/login/page.tsx b/apps/web/src/app/login/page.tsx index 7c0ab547..6f0f8ecf 100644 --- a/apps/web/src/app/login/page.tsx +++ b/apps/web/src/app/login/page.tsx @@ -1,4 +1,10 @@ +import { cookies } from 'next/headers'; +import { redirect } from 'next/navigation'; + import PikiLogo from '@/assets/images/piki-logo.svg'; +import { ROUTES } from '@/consts/route'; +import { isTokenValid } from '@/utils/auth'; +import { isValidLoginRedirectPath } from '@/utils/loginRedirect'; import LoginButtons from './_components/LoginButtons'; @@ -7,7 +13,17 @@ type LoginPageProps = { }; async function LoginPage({ searchParams }: LoginPageProps) { - const { redirect, action } = await searchParams; + const { redirect: redirectParam, action } = await searchParams; + + // 이미 유효한 세션이 있으면 로그인 페이지를 건너뜀 (게스트·소셜 모두) + // action이 있으면 세션 만료/소셜 오류 등 명시적 케이스 → 건너뛰지 않음 + if (!action) { + const cookieStore = await cookies(); + const accessToken = cookieStore.get('access_token')?.value; + if (accessToken && isTokenValid(accessToken)) { + redirect(isValidLoginRedirectPath(redirectParam) ? redirectParam : ROUTES.HOME); + } + } return (
@@ -19,7 +35,7 @@ async function LoginPage({ searchParams }: LoginPageProps) {
- +
);