Commit 246e0e1
fix(auth): break /_account ↔ /_console login redirect loop
Root cause: Console's @object-ui/auth AuthProvider has a Bearer-token
fetch wrapper that pulls auth-session-token from localStorage and
sends it as Authorization on every /api/* call. The Account SPA's
sign-in/sign-out paths use a different client (client-react) that
touches cookies but never touches that localStorage key. After a
user signs out on Account and a new user signs in, Account writes
fresh cookies but localStorage still holds the previous user's
Bearer token. Console then sends the stale Bearer to /get-session,
the server prefers Bearer over Cookie and returns null, AuthProvider
thinks the session is invalid, AuthGuard renders AccountLoginRedirect,
the browser navigates to /_account/login, Account sees a valid cookie
session and bounces back to /_console/home — infinite loop.
Two-layer fix:
1. apps/console/src/lib/auth-preflight.ts (NEW) — before mounting
<AuthProvider>, probe /get-session with the localStorage Bearer
alone (no cookie). If the response is unauthenticated, purge the
stale auth-session-token + auth-active-organization-id keys so
AuthProvider's first getSession() falls back to the cookie cleanly.
2. apps/account/src/hooks/useSession.ts — mirror cookie session into
localStorage on every refresh() and clear it on logout(), so the
keys never go stale in the first place. Also stamp the active org
id when the user changes orgs.
Net effect: the loop is fixed at the source (Account keeps localStorage
in sync) AND any historical stale state is self-healed on first visit
(Console preflight). Single round-trip cost when token is valid; zero
UI flicker because it runs before React mounts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 4e94e65 commit 246e0e1
3 files changed
Lines changed: 156 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
80 | 118 | | |
81 | 119 | | |
82 | 120 | | |
| |||
125 | 163 | | |
126 | 164 | | |
127 | 165 | | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
128 | 170 | | |
129 | 171 | | |
130 | 172 | | |
131 | 173 | | |
| 174 | + | |
132 | 175 | | |
133 | 176 | | |
134 | 177 | | |
| |||
156 | 199 | | |
157 | 200 | | |
158 | 201 | | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
159 | 205 | | |
160 | 206 | | |
161 | 207 | | |
| |||
164 | 210 | | |
165 | 211 | | |
166 | 212 | | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
167 | 221 | | |
168 | 222 | | |
169 | 223 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
0 commit comments