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}
}
+
또는