Se soluciono autenticacion
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user