mirror of https://github.com/usememos/memos
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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. |
10 hours ago | |
|---|---|---|
| .. | ||
| docs | ||
| public | ||
| src | 10 hours ago | |
| .gitignore | ||
| biome.json | ||
| components.json | ||
| index.html | ||
| package.json | ||
| pnpm-lock.yaml | ||
| tsconfig.json | ||
| vite.config.mts | ||