diff --git a/apps/web/src/app/(auth)/components/StartButton.tsx b/apps/web/src/app/(auth)/components/StartButton.tsx
new file mode 100644
index 00000000..828f9fee
--- /dev/null
+++ b/apps/web/src/app/(auth)/components/StartButton.tsx
@@ -0,0 +1,31 @@
+'use client';
+
+import { useRouter } from 'next/navigation';
+import { Button } from '@/components/buttons/Button';
+import { useAuth } from '@/hooks/useAuth';
+
+interface StartButtonProps {
+ className?: string;
+ children: React.ReactNode;
+}
+export default function StartButton({
+ className,
+ children,
+}: StartButtonProps) {
+ const router = useRouter();
+ const { isAuth, isLoading } = useAuth();
+
+ const handleStart = () => {
+ router.replace(isAuth ? '/main' : '/login');
+ };
+ return (
+
+ );
+}
diff --git a/apps/web/src/app/(auth)/signup/[type]/complete/page.tsx b/apps/web/src/app/(auth)/signup/[type]/complete/page.tsx
index 5820e784..ec48b5f0 100644
--- a/apps/web/src/app/(auth)/signup/[type]/complete/page.tsx
+++ b/apps/web/src/app/(auth)/signup/[type]/complete/page.tsx
@@ -3,7 +3,7 @@
import { useEffect, useState } from 'react';
import { Button } from '@/components/buttons/Button';
import CompleteImg from './components/CompleteImg';
-import { useAuthStore } from '@/stores/authStore';
+import { useAuth } from '@/hooks/useAuth';
import { useRouter } from 'next/navigation';
import {
useSaveNickname,
@@ -12,10 +12,11 @@ import {
import { useSignupFlow } from '@/hooks/useSignupFlow';
import { MotionSlotMachineText } from '@/components/MotionSlotMachineText';
import { SignupCompleteResponse } from '@/generated/api/models';
+import { User } from '@/types/user.types';
export default function SignUpCompletePage() {
- const login = useAuthStore((state) => state.login);
const router = useRouter();
+ const { login } = useAuth();
const { userType } = useSignupFlow();
const userTypeLabel =
userType === 'FOUNDER' ? '예비 창업자' : '주민';
@@ -30,14 +31,8 @@ export default function SignUpCompletePage() {
];
// 회원가입 완료 후 로그인 및 리다이렉트 처리
- const handleSuccess = ({
- user,
- accessToken,
- }: SignupCompleteResponse) => {
- login({
- user,
- accessToken,
- });
+ const handleSuccess = (user: User) => {
+ login(user);
console.log('회원가입 및 로그인 완료:', { nickname });
router.replace('/main');
};
@@ -48,10 +43,7 @@ export default function SignUpCompletePage() {
mutation: {
onSuccess: (data: SignupCompleteResponse) => {
if (data) {
- handleSuccess({
- user: data.user,
- accessToken: data.accessToken,
- });
+ handleSuccess(data.user);
} else {
console.error('닉네임 또는 토큰 정보가 없습니다.');
}
diff --git a/apps/web/src/app/(auth)/signup/components/RedirectIfAuthed.tsx b/apps/web/src/app/(auth)/signup/components/RedirectIfAuthed.tsx
deleted file mode 100644
index 2f03b9ce..00000000
--- a/apps/web/src/app/(auth)/signup/components/RedirectIfAuthed.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-// apps/web/src/components/guards/RedirectIfAuthenticated.tsx
-'use client';
-
-import { useEffect, useState } from 'react';
-import { useRouter } from 'next/navigation';
-import { useAuthStore } from '@/stores/authStore';
-
-interface RedirectIfAuthedProps {
- to?: string; // 인증 시 이동할 경로 (기본: /main)
- children?: React.ReactNode;
- className?: string; // 추가적인 클래스
-}
-
-export default function RedirectIfAuthed({
- to = '/main',
- children,
- className = '',
-}: RedirectIfAuthedProps) {
- // Zustand에서 인증 여부 가져오기
- const isAuth = useAuthStore((s) => s.getIsAuth());
- const router = useRouter();
-
- // CSR 마운트 완료 전 렌더 차단(깜빡임 방지)
- const [mounted, setMounted] = useState(false);
- useEffect(() => setMounted(true), []);
-
- useEffect(() => {
- if (!mounted) return;
- if (isAuth) {
- // 이미 로그인되어 있으면 메인으로 보냄
- console.warn(
- '이미 로그인되어 있습니다. 메인 페이지로 이동합니다.',
- );
- router.replace(to);
- }
- }, [mounted, isAuth, router, to]);
-
- //아직 마운트 전이거나, 리다이렉트 진행 중에는 children 렌더 X
- if (!mounted || isAuth) return null;
-
- // 비로그인 상태면 하위 콘텐츠 보여줌
- return
{children}
;
-}
diff --git a/apps/web/src/app/(auth)/signup/layout.tsx b/apps/web/src/app/(auth)/signup/layout.tsx
index 05914b84..56283420 100644
--- a/apps/web/src/app/(auth)/signup/layout.tsx
+++ b/apps/web/src/app/(auth)/signup/layout.tsx
@@ -1,4 +1,3 @@
-import RedirectIfAuthed from './components/RedirectIfAuthed';
/**
* 회원가입 레이아웃
*/
@@ -14,9 +13,7 @@ export default function SignUpLayout({
}: SignUpLayoutProps) {
return (
-
- {children}
-
+ {children}
);
}
diff --git a/apps/web/src/app/main/profile/page.tsx b/apps/web/src/app/main/profile/page.tsx
index 406d8c31..ab348237 100644
--- a/apps/web/src/app/main/profile/page.tsx
+++ b/apps/web/src/app/main/profile/page.tsx
@@ -1,13 +1,12 @@
'use client';
+
import { useRouter } from 'next/navigation';
import { Button } from '@/components/buttons/Button';
-import { useAuthStore } from '@/stores/authStore';
+import { useAuth } from '@/hooks/useAuth';
export default function ProfilePage() {
const router = useRouter();
- const logout = useAuthStore((state) => state.logout);
+ const { logout } = useAuth();
const handleLogout = () => {
- // 로그아웃 로직을 여기에 추가하세요.
- console.log('로그아웃 버튼 클릭');
logout();
router.push('/');
};
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
index cf324dc5..4240dad0 100644
--- a/apps/web/src/app/page.tsx
+++ b/apps/web/src/app/page.tsx
@@ -1,41 +1,22 @@
-'use client';
-
-import { useRouter } from 'next/navigation';
-import { useAuth } from '@/hooks/useAuth';
import LogoImage from '@/assets/images/LogoImage';
-import Button from '@/components/buttons/Button';
+import StartButton from '@/app/(auth)/components/StartButton';
export default function HomePage() {
- const router = useRouter();
- const { isAuth, isLoading } = useAuth();
-
- const handleStart = () => {
- router.replace(isAuth ? '/main' : '/login');
- };
-
return (
소소에 오신 것을 환영합니다
-
+
-
+
일상의 소소한 순간들을 기록해보세요
-
-
+
소소 시작하기
diff --git a/apps/web/src/components/buttons/Button.tsx b/apps/web/src/components/buttons/Button.tsx
index 6e60137d..b709db31 100644
--- a/apps/web/src/components/buttons/Button.tsx
+++ b/apps/web/src/components/buttons/Button.tsx
@@ -95,7 +95,7 @@ export const Button = React.forwardRef<
const isDisabled = disabled;
const classes = cn(
- 'relative inline-flex items-center justify-center rounded-lg font-medium select-none overflow-hidden',
+ 'relative flex items-center justify-center rounded-lg font-medium select-none overflow-hidden',
'transition-transform duration-150 ease-out',
// 기본 variant 스타일
variantMap[variant],
@@ -111,7 +111,7 @@ export const Button = React.forwardRef<
);
return (
-
+