zkt25/sk1/frontend/src/pages/LoginPage.jsx

58 lines
1.6 KiB
JavaScript

import { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useAuth } from "../contexts/AuthContext";
export default function LoginPage() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [error, setError] = useState("");
const navigate = useNavigate();
const { login } = useAuth();
const handleSubmit = async (e) => {
e.preventDefault();
setError("");
try {
const res = await fetch("/api/auth/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, password }),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error || "Login failed");
login(data.token); // store token & user in context
navigate("/"); // redirect on success
} catch (err) {
setError(err.message);
}
};
return (
<main className="form-page">
<h1>Sign In</h1>
<form onSubmit={handleSubmit}>
{error && <p className="error">{error}</p>}
<label>
Email
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</label>
<label>
Password
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
/>
</label>
<button type="submit">Log In</button>
</form>
</main>
);
}