• Steven's avatar
    fix(web): fix spurious logout on page reload with expired access token · 9ecd7b87
    Steven authored
    Two bugs caused users to be redirected to /auth too frequently:
    
    1. Race condition in Promise.all([initInstance(), initAuth()]):
       initInstance() makes a gRPC request whose auth interceptor calls
       getAccessToken() synchronously. When the access token was expired,
       getAccessToken() eagerly deleted it from localStorage as a "cleanup"
       side-effect. By the time initAuth() ran and checked hasStoredToken(),
       localStorage was already empty, so it skipped the getCurrentUser()
       call and the token refresh cycle entirely — logging the user out even
       when the refresh-token cookie was still valid. Fix: remove the
       localStorage deletion from getAccessToken(); clearAccessToken()
       (called on confirmed auth failure and logout) handles proper cleanup.
    
    2. React Query retry: 1 caused a second refresh+redirect attempt after
       auth failures. The auth interceptor already handles token refresh and
       request retry internally. If it still throws Unauthenticated, the
       redirect is already in flight — a React Query retry only fires another
       failed refresh and a redundant redirectOnAuthFailure() call. Fix: use
       a shouldRetry function that skips retries for Unauthenticated errors
       while keeping the existing once-retry behaviour for other errors.
    9ecd7b87
Name
Last commit
Last update
..
components Loading commit data...
contexts Loading commit data...
helpers Loading commit data...
hooks Loading commit data...
layouts Loading commit data...
lib Loading commit data...
locales Loading commit data...
pages Loading commit data...
router Loading commit data...
themes Loading commit data...
types Loading commit data...
utils Loading commit data...
App.tsx Loading commit data...
auth-state.ts Loading commit data...
connect.ts Loading commit data...
i18n.ts Loading commit data...
index.css Loading commit data...
instance-config.ts Loading commit data...
main.tsx Loading commit data...