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,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import { fetchUsers, createUser, updateUser, deleteUser } from '../api/users.ts';
import { fetchUsers, createUser, updateUser, deleteUser, getCurrentUser } from '../api/users.ts';
import { useNotification } from '../context/NotificationContext';
const initialForm = {
@@ -44,33 +44,24 @@ export default function Users() {
const [itemsPerPage, setItemsPerPage] = useState(10);
const { showMessage } = useNotification();
const token = localStorage.getItem('access');
const loadUsers = () => {
setLoading(true);
fetchUsers(token)
fetchUsers()
.then(data => {
setUsers(data);
setLoading(false);
})
.catch(err => {
if (err.message === 'SESSION_EXPIRED') {
localStorage.removeItem('access');
localStorage.removeItem('refresh');
showMessage('Tu sesión ha expirado, por favor inicia sesión de nuevo.', 'error');
setTimeout(() => {
window.location.href = '/login';
}, 2000);
} else {
setError(err.message);
}
console.error('Error loading users:', err);
setError('Error al cargar usuarios');
setLoading(false);
});
};
useEffect(() => {
// Si no hay token, limpiar y redirigir a login inmediatamente
if (!token) {
const accessToken = localStorage.getItem('access');
if (!accessToken) {
localStorage.removeItem('access');
localStorage.removeItem('refresh');
localStorage.removeItem('username');
@@ -86,27 +77,7 @@ export default function Users() {
loadUsers();
// Siempre sincroniza la información del usuario autenticado en localStorage
fetch(`${import.meta.env.VITE_EFC_API_URL}/user/users/me/`, {
headers: { 'Authorization': `Bearer ${token}` }
})
.then(async res => {
if (!res.ok) {
// Token inválido o expirado, limpiar localStorage y redirigir a login
console.log('Token inválido o expirado');
localStorage.removeItem('access');
localStorage.removeItem('refresh');
localStorage.removeItem('username');
localStorage.removeItem('user_email');
localStorage.removeItem('user_id');
localStorage.removeItem('user_groups');
localStorage.removeItem('user_first_name');
localStorage.removeItem('user_last_name');
localStorage.removeItem('user_is_importador');
window.location.href = '/login';
return null;
}
return res.json();
})
getCurrentUser()
.then(data => {
console.log('Respuesta de /api/users/me/:', data);
if (data && data.username) {
@@ -146,13 +117,13 @@ export default function Users() {
setSubmitting(true);
try {
if (editingId) {
await updateUser(token, editingId, form);
await updateUser(editingId, form);
showMessage('Usuario actualizado exitosamente', 'success');
setShowEditModal(false);
} else {
const groups = createType === 'importador' ? [3, 5] : [4, 3];
const extra = createType === 'importador' ? { is_importador: true } : {};
await createUser(token, { ...form, groups, ...extra });
await createUser({ ...form, groups, ...extra });
showMessage(createType === 'importador' ? 'Importador creado exitosamente' : 'Usuario creado exitosamente', 'success');
setShowCreateModal(false);
}
@@ -170,7 +141,7 @@ export default function Users() {
if (!userToDelete) return;
setSubmitting(true);
try {
await deleteUser(token, userToDelete.id);
await deleteUser(userToDelete.id);
showMessage('Usuario eliminado exitosamente', 'success');
setShowDeleteModal(false);
setUserToDelete(null);