Fix: Add fallback token retrieval endpoint and improved token extraction debugging

This commit is contained in:
2026-01-18 04:15:37 +00:00
parent 1322ace853
commit 3cc466c12d
3 changed files with 112 additions and 6 deletions
+32 -6
View File
@@ -280,6 +280,7 @@
let refreshPromise = null;
let lastRefreshTime = 0;
const REFRESH_COOLDOWN = 2000; // 2 second cooldown between refreshes
let refreshFailureCount = 0;
const refreshGraphToken = async () => {
try {
@@ -290,7 +291,9 @@
// If refreshed recently, return cached token
if (Date.now() - lastRefreshTime < REFRESH_COOLDOWN) {
return getGraphToken();
const cached = getGraphToken();
if (cached) return cached;
// Even within cooldown, if no cached token, still try refresh
}
// Start new refresh
@@ -299,9 +302,22 @@
const authData = await pb.collection('users').authRefresh();
const meta = authData?.meta || pb?.authStore?.model?.meta || {};
const token = extractGraphToken(meta);
if (token) localStorage.setItem(GRAPH_TOKEN_KEY, token);
lastRefreshTime = Date.now();
return token || '';
if (token) {
localStorage.setItem(GRAPH_TOKEN_KEY, token);
lastRefreshTime = Date.now();
refreshFailureCount = 0;
console.log('✓ Graph token refreshed');
return token;
} else {
console.warn('Graph token missing from auth response');
refreshFailureCount++;
return '';
}
} catch (err) {
console.warn('Token refresh request failed:', err?.message||err);
refreshFailureCount++;
throw err;
} finally {
refreshPromise = null;
}
@@ -310,8 +326,18 @@
return await refreshPromise;
} catch(err){
refreshPromise = null;
console.warn('Graph token refresh failed:', err?.message||err);
return getGraphToken(); // Return cached token if refresh fails
console.error('Graph token refresh failed completely:', err?.message||err);
// If refresh failed multiple times, force sign-in
if (refreshFailureCount >= 2) {
console.warn('Token refresh failed multiple times. Forcing sign-in.');
localStorage.removeItem(GRAPH_TOKEN_KEY);
try { pb?.authStore?.clear?.(); } catch {}
try { localStorage.removeItem('pocketbase_auth'); } catch {}
try { sessionStorage.clear(); } catch {}
window.location.href = 'signin.html?expired=1';
return '';
}
return '';
}
}