아직은 고등학교 2학년 대상으로만 서비스를 하고 있어요!
diff --git a/apps/service/src/app/api/auth/callback/kakao/page.tsx b/apps/service/src/app/api/auth/callback/kakao/page.tsx
new file mode 100644
index 00000000..b38e51e3
--- /dev/null
+++ b/apps/service/src/app/api/auth/callback/kakao/page.tsx
@@ -0,0 +1,20 @@
+'use client';
+
+import { postKakaoLogin } from '@apis';
+import { useSearchParams } from 'next/navigation';
+import { useEffect } from 'react';
+
+const Page = () => {
+ const searchParams = useSearchParams();
+ const code = searchParams.get('code');
+
+ useEffect(() => {
+ if (code) {
+ postKakaoLogin(code);
+ }
+ }, []);
+
+ return <>>;
+};
+
+export default Page;
diff --git a/apps/service/src/app/layout.tsx b/apps/service/src/app/layout.tsx
index c172743d..2e43092d 100644
--- a/apps/service/src/app/layout.tsx
+++ b/apps/service/src/app/layout.tsx
@@ -52,8 +52,8 @@ export default function RootLayout({
- {children}
>}>
+ {children}
{modal}
diff --git a/apps/service/src/app/login/page.tsx b/apps/service/src/app/login/page.tsx
index 0ac3336f..23f070e1 100644
--- a/apps/service/src/app/login/page.tsx
+++ b/apps/service/src/app/login/page.tsx
@@ -1,33 +1,19 @@
'use client';
-import { postLogin } from '@apis';
-import { Button, Input } from '@components';
-import { SubmitHandler, useForm } from 'react-hook-form';
-import { useRouter } from 'next/navigation';
+import { useTrackEvent } from '@hooks';
import { LogoLogin } from '@/assets/svg/logo';
-import { setAccessToken } from '@/contexts/AuthContext';
-
-interface LoginType {
- email: string;
- password: string;
-}
+import { KakaoButton } from '@/components/login';
const Page = () => {
- const router = useRouter();
- const {
- register,
- handleSubmit,
- formState: { errors },
- } = useForm();
+ const { trackEvent } = useTrackEvent();
- const onSubmitLogin: SubmitHandler = async (formData) => {
- const { data } = await postLogin(formData.email, formData.password);
+ const kakaoLoginUrl = `https://kauth.kakao.com/oauth/authorize?client_id=${
+ process.env.NEXT_PUBLIC_REST_API_KEY
+ }&redirect_uri=${process.env.NEXT_PUBLIC_REDIRECT_URI}&response_type=code`;
- const { accessToken } = data?.data || {};
- if (accessToken) {
- setAccessToken(accessToken);
- router.push('/');
- }
+ const handleLoginClick = () => {
+ trackEvent('kakao_login_click');
+ window.location.replace(kakaoLoginUrl);
};
return (
@@ -41,41 +27,11 @@ const Page = () => {
포인터
- {/*
+
포인터는 태블릿의 스플릿뷰를 권장해요
-
-
-
*/}
-
+
+ {/*
*/}
+
);
};
diff --git a/apps/service/src/components/home/HomeHeader.tsx b/apps/service/src/components/home/HomeHeader.tsx
index 024a590a..1807ab13 100644
--- a/apps/service/src/components/home/HomeHeader.tsx
+++ b/apps/service/src/components/home/HomeHeader.tsx
@@ -1,14 +1,18 @@
+'use client';
+
import Link from 'next/link';
import { IcSetting } from '@svg';
+import { useEffect, useState } from 'react';
import { LogoHeader } from '@/assets/svg/logo';
-interface HomeHeaderProps {
- grade: number;
- name: string;
-}
+const HomeHeader = () => {
+ const [name, setName] = useState(null);
+
+ useEffect(() => {
+ setName(localStorage.getItem('name'));
+ }, []);
-const HomeHeader = ({ name }: HomeHeaderProps) => {
return (