fix(auth): clear cache + force re-auth on 401 #429
No reviewers
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp!429
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/408-auth-cache-invalidation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Fixes #408.
Behebt die Stale-Cache-Schwäche bei abgelaufenem ID-Token: API gibt korrekt 401 zurück (jose validiert
expstandardmäßig), aber der Client behielt die gecachten Listen, weil weder der HTTP-Layer noch der QueryClient differenziert zwischen Auth-Errors und generischen 4xx/5xx unterschieden.Änderungen
AuthError extends ApiErrorim@mrrmlab/api-client: HttpClient wirft typed AuthError bei 401 (statt generisch ApiError). instanceof-Checks auf ApiError bleiben kompatibel.installAuthErrorHandler/<AuthErrorHandler>in@mrrmlab/ui: subscribed an QueryCache + MutationCache; bei matching Error (predicate-supplied vom App-Shell) →queryClient.clear()+onAuthError(). Decoupled per Predicate, sodass@mrrmlab/uinicht auf@mrrmlab/api-clienthängt.apps/web/src/app.tsx: redirect zu logoutUrl bzw./login. Inapps/mobile/app/_layout.tsx:router.replace('/login').packages/api-client(vitest) undpackages/ui(vitest), beide ohne Tests bisher.Curl-Test (server-side expired token → 401)
Statt manueller curl-Doku wurde der Test als Integration-Test eingebaut, um Regressionen zu fangen:
signTokenakzeptiert jetzt eine optionaleexpiresIn-Option ('-1m'= bereits abgelaufen).Akzeptanz (#408)
installAuthErrorHandler+ Unit-TestsqueryClient.clear()läuft beim Auth-FehlerTest plan
pnpm --filter @mrrmlab/api-client test(4 passed)pnpm --filter @mrrmlab/ui test(4 passed)pnpm --filter @mrrmlab/api test:integration(84 passed, +1 neu)pnpm --filter @mrrmlab/web test(70 passed)pnpm --filter @mrrmlab/mobile test(61 passed)