fix(auth): resolve race condition causing files not to load on initial visit

The cached-user-data path in checkAuthentication() fired resolveHomeFolder()
and loadFiles() concurrently with refreshUserData() using non-blocking .then()
chains. When the session cookie was expired, the folder/file API calls received
401 errors before the session could be refreshed. Now awaits session validation
before loading files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jared Wolff
2026-03-06 13:01:08 -05:00
parent 9aa35aa0ea
commit 5b5a9173bc
3 changed files with 44 additions and 37 deletions
+28 -16
View File
@@ -92,24 +92,36 @@ async function checkAuthentication() {
window.updateStorageUsageDisplay(userData);
refreshUserData().then(freshData => {
if (freshData) {
console.log('Storage usage updated from server');
} else {
// Session expired — try silent refresh first
console.warn('Session may have expired, trying refresh...');
fetch('/api/auth/refresh', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', ...getCsrfHeaders() }, body: '{}' })
.then(r => r.ok ? refreshUserData() : Promise.reject(new Error('refresh failed')))
.catch(() => {
localStorage.removeItem(USER_DATA_KEY);
window.location.href = '/login?source=session_expired';
});
// Validate session BEFORE loading files to avoid 401 race condition
const freshData = await refreshUserData();
if (freshData) {
console.log('Storage usage updated from server');
} else {
// Session expired — try silent refresh first
console.warn('Session may have expired, trying refresh...');
try {
const r = await fetch('/api/auth/refresh', {
method: 'POST',
credentials: 'same-origin',
headers: { 'Content-Type': 'application/json', ...getCsrfHeaders() },
body: '{}'
});
if (r.ok) {
await refreshUserData();
} else {
localStorage.removeItem(USER_DATA_KEY);
window.location.href = '/login?source=session_expired';
return;
}
} catch (err) {
localStorage.removeItem(USER_DATA_KEY);
window.location.href = '/login?source=session_expired';
return;
}
}).catch(err => {
console.warn('Could not refresh user data:', err);
});
}
resolveHomeFolder().then(() => window.loadFiles());
await resolveHomeFolder();
window.loadFiles();
} else {
// No cached user data — must verify session from server
console.log('No cached user data, fetching from server');