From 6a9b71922625666289f21ce64985bc43ed759d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sof=C3=ADa=20Maturana?= Date: Mon, 18 May 2026 11:59:14 -0400 Subject: [PATCH] feat: agregar request para profile --- src/context/UserContext.jsx | 25 +++++++++++++++++++++++-- src/pages/Login.jsx | 10 +++++++--- src/pages/Profile.jsx | 16 +++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/context/UserContext.jsx b/src/context/UserContext.jsx index f49e290..bb3ae99 100644 --- a/src/context/UserContext.jsx +++ b/src/context/UserContext.jsx @@ -9,7 +9,7 @@ const UserProvider = ({ children }) => { const storeData = (email, token) => { setEmail(email); setToken(token); - localStorage.setItem("loginToken", data.token); + localStorage.setItem("loginToken", token); }; const login = async (user, password) => { const res = await fetch("http://localhost:5000/api/auth/login", { @@ -40,8 +40,29 @@ const UserProvider = ({ children }) => { setToken(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 ( - + {children} ); diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index d354da5..46951c5 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -4,12 +4,15 @@ import { useContext } from "react"; // Librería recomendada en tutoría import { z } from "zod"; import { UserContext } from "../context/UserContext"; -import { useNavigate } from "react-router-dom"; // Esquema de validación de login const loginSchema = z.object({ - user: z.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" }), + user: z + .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 = () => { @@ -21,6 +24,7 @@ const Login = () => { try { await login(user, password); } catch (error) { + console.error(error); alert("Error de login"); } }, diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index 81fe7a1..ad5f5d8 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -1,9 +1,19 @@ -import { useContext } from "react"; +import { useContext, useState } from "react"; import { UserContext } from "../context/UserContext"; +import { useEffect } from "react"; const Profile = () => { - const email = "test@example.com"; - const { logout } = useContext(UserContext); + const [email, setEmail] = useState(""); + const { getProfile, logout } = useContext(UserContext); + useEffect(() => { + getProfile() + .then((data) => { + setEmail(data.email); + }) + .catch((error) => { + console.error(error); + }); + }); return (