mirror of
https://github.com/emailerfacu-spec/minix-front.git
synced 2026-04-18 15:57:31 -03:00
correjida logica de refresh
ahora si tiene en cuenta el .exp del jwt para saber cuando va a renovar
This commit is contained in:
@@ -27,8 +27,43 @@ if (browser) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (browser) {
|
if (browser) {
|
||||||
|
const decodeJWT = (token: string) => {
|
||||||
|
try {
|
||||||
|
const base64Url = token.split('.')[1];
|
||||||
|
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
|
||||||
|
const jsonPayload = decodeURIComponent(
|
||||||
|
atob(base64)
|
||||||
|
.split('')
|
||||||
|
.map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
||||||
|
.join('')
|
||||||
|
);
|
||||||
|
|
||||||
|
return JSON.parse(jsonPayload);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error decodificando JWT:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const shouldRefreshToken = (sesion: Sesion | null): boolean => {
|
||||||
|
if (!sesion || !sesion.accessToken) return false;
|
||||||
|
|
||||||
|
const decoded = decodeJWT(sesion.accessToken);
|
||||||
|
if (!decoded || !decoded.exp) return false;
|
||||||
|
|
||||||
|
const expirationTime = decoded.exp * 1000;
|
||||||
|
const currentTime = Date.now();
|
||||||
|
const timeUntilExpiration = expirationTime - currentTime;
|
||||||
|
|
||||||
|
return timeUntilExpiration <= 60 * 1000; // 1 minuto
|
||||||
|
};
|
||||||
|
|
||||||
const refreshAccessToken = async () => {
|
const refreshAccessToken = async () => {
|
||||||
try {
|
try {
|
||||||
|
const sesion = get(currentSesion);
|
||||||
|
if (!shouldRefreshToken(sesion)) return;
|
||||||
|
|
||||||
|
console.log('refrescando token');
|
||||||
const response = await fetch(get(apiBase) + '/api/auth/refresh', {
|
const response = await fetch(get(apiBase) + '/api/auth/refresh', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -46,14 +81,14 @@ if (browser) {
|
|||||||
return sesion;
|
return sesion;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.error('Error refreshing token:', response.statusText);
|
console.error('Error refrescando token:', response.statusText);
|
||||||
currentSesion.set(null);
|
currentSesion.set(null);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error refreshing token:', error);
|
console.error('Error refrescando token:', error);
|
||||||
currentSesion.set(null);
|
currentSesion.set(null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
setInterval(refreshAccessToken, 10 * 60 * 1000);
|
setInterval(refreshAccessToken, 30 * 1000); // Check every 30 seconds
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user