feat: agregar request para profile

This commit is contained in:
Sofía Maturana 2026-05-18 11:59:14 -04:00
parent a42e769c3e
commit 6a9b719226
3 changed files with 43 additions and 8 deletions

View file

@ -9,7 +9,7 @@ const UserProvider = ({ children }) => {
const storeData = (email, token) => { const storeData = (email, token) => {
setEmail(email); setEmail(email);
setToken(token); setToken(token);
localStorage.setItem("loginToken", data.token); localStorage.setItem("loginToken", token);
}; };
const login = async (user, password) => { const login = async (user, password) => {
const res = await fetch("http://localhost:5000/api/auth/login", { const res = await fetch("http://localhost:5000/api/auth/login", {
@ -40,8 +40,29 @@ const UserProvider = ({ children }) => {
setToken(null); setToken(null);
setEmail(null); setEmail(null);
}; };
const getProfile = async () => {
const res = await fetch("http://localhost:5000/api/auth/me", {
headers: { Authorization: `Bearer ${token}` },
});
if (!res.ok) {
throw new Error("Error al obtener perfil", res.status);
}
const data = await res.json();
return data;
};
return ( return (
<UserContext.Provider value={{ token, setToken, email, setEmail, login, register, logout }}> <UserContext.Provider
value={{
token,
setToken,
email,
setEmail,
login,
register,
getProfile,
logout,
}}
>
{children} {children}
</UserContext.Provider> </UserContext.Provider>
); );

View file

@ -4,12 +4,15 @@ import { useContext } from "react";
// Librería recomendada en tutoría // Librería recomendada en tutoría
import { z } from "zod"; import { z } from "zod";
import { UserContext } from "../context/UserContext"; import { UserContext } from "../context/UserContext";
import { useNavigate } from "react-router-dom";
// Esquema de validación de login // Esquema de validación de login
const loginSchema = z.object({ const loginSchema = z.object({
user: z.email({ error: "Email inválido" }).nonempty({ error: "Se requiere un email" }), user: z
password: z.string().min(6, { error: "La contraseña debe tener al menos 6 caracteres" }), .email({ error: "Email inválido" })
.nonempty({ error: "Se requiere un email" }),
password: z
.string()
.min(6, { error: "La contraseña debe tener al menos 6 caracteres" }),
}); });
const Login = () => { const Login = () => {
@ -21,6 +24,7 @@ const Login = () => {
try { try {
await login(user, password); await login(user, password);
} catch (error) { } catch (error) {
console.error(error);
alert("Error de login"); alert("Error de login");
} }
}, },

View file

@ -1,9 +1,19 @@
import { useContext } from "react"; import { useContext, useState } from "react";
import { UserContext } from "../context/UserContext"; import { UserContext } from "../context/UserContext";
import { useEffect } from "react";
const Profile = () => { const Profile = () => {
const email = "test@example.com"; const [email, setEmail] = useState("");
const { logout } = useContext(UserContext); const { getProfile, logout } = useContext(UserContext);
useEffect(() => {
getProfile()
.then((data) => {
setEmail(data.email);
})
.catch((error) => {
console.error(error);
});
});
return ( return (
<div> <div>
<p> <p>