Se soluciono autenticacion

This commit is contained in:
2025-08-05 13:06:24 -06:00
parent c280afe646
commit c9df4e3ab2
21 changed files with 758 additions and 624 deletions

View File

@@ -1,6 +1,5 @@
import React, { createContext, useContext, useEffect, useState, useRef } from 'react';
import { getCurrentUser } from '../api/users.ts';
import { refreshToken } from '../api/auth.js';
import { fetchWithAuth } from '../fetchWithAuth';
const UserContext = createContext({
user: null,
@@ -19,51 +18,28 @@ export function UserProvider({ children }) {
if (fetchedOnce.current && loading) return;
setLoading(true);
setError(null);
let token = localStorage.getItem('access');
let triedRefresh = false;
while (true) {
try {
if (token) {
const userData = await getCurrentUser(token);
try {
const token = localStorage.getItem('access');
if (token) {
const API_URL = import.meta.env.VITE_EFC_API_URL;
const response = await fetchWithAuth(`${API_URL}/user/users/me/`);
if (response.ok) {
const userData = await response.json();
setUser(userData);
} else {
setUser(null);
}
break;
} catch (err) {
// Si el token expiró, intenta refrescarlo una vez
if (!triedRefresh && (err.message === 'SESSION_EXPIRED' || err.message.includes('401'))) {
triedRefresh = true;
const refresh = localStorage.getItem('refresh');
if (refresh) {
try {
const data = await refreshToken(refresh);
if (data.access) {
localStorage.setItem('access', data.access);
token = data.access;
continue; // Reintenta con el nuevo token
} else {
throw new Error('No se pudo refrescar el token');
}
} catch (refreshErr) {
setError(refreshErr);
setUser(null);
localStorage.removeItem('access');
localStorage.removeItem('refresh');
window.dispatchEvent(new CustomEvent('authStateChanged'));
break;
}
} else {
setUser(null);
break;
}
} else {
setError(err);
setUser(null);
break;
}
} else {
setUser(null);
}
} catch (err) {
console.error('Error fetching user:', err);
setError(err);
setUser(null);
}
setLoading(false);
fetchedOnce.current = true;
};