diff --git a/src/components/pages/LoginPage.js b/src/components/pages/LoginPage.js index f383b96..1c9a214 100644 --- a/src/components/pages/LoginPage.js +++ b/src/components/pages/LoginPage.js @@ -7,32 +7,35 @@ import Button from "../Button"; import HorizontalRule from "../HorizontalRule"; import Link from "next/link"; import styles from "./LoginPage.module.css"; +import { useRouter } from "next/navigation"; +import { authService } from "@/lib/authService"; function LoginPage() { - const [values, setValues] = useState({ - email: "", - password: "", - }); + const [values, setValues] = useState({ email: "", password: "" }); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const router = useRouter(); function handleChange(e) { const { name, value } = e.target; - - setValues((prevValues) => ({ - ...prevValues, - [name]: value, - })); + setValues((prev) => ({ ...prev, [name]: value })); } async function handleSubmit(e) { e.preventDefault(); - // TODO: 로그인 처리 - // 1. fetch 를 사용하여 로그인 요청을 보냅니다. - // 2. 성공 시 Application 에 쿠키 내 토큰 저장 여부를 확인합니다. - // 3. 로딩 상태를 만들고 로딩중일 때는 로그인 버튼을 비활성화 합니다. - // 4. 추가로 로딩중일 때는 로그인 버튼텍스트를 "로그인 중..."으로 변경합니다. - // 5. 에러 상태를 만들고 로그인 요청이 실패 시 에러 메시지를 로그인버튼 바로 위에 표시합니다. + setError(null); + setLoading(true); + try { + await authService.login(values.email, values.password); + router.push("/me"); + } catch (err) { + setError("로그인에 실패했습니다."); + } finally { + setLoading(false); + } } + return ( <>

로그인

@@ -61,7 +64,10 @@ function LoginPage() { value={values.password} onChange={handleChange} /> - + {error &&
{error}
} + 또는