fix(auth): getUser() refresht abgelaufene ID-Tokens — Fixes #404 #410
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!410
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/404-getuser-refresh"
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
AuthClient.getUser()warfError: ID token expireddirekt ausverifyIdToken(), ohne den bereits existierenden Refresh-Pfad zu nutzen — die unhandled promise rejection landete im UI als roher Stacktrace (siehe #404). Inkonsistenz innerhalb der eigenen API:getAccessToken()refresht korrekt,getUser()nicht.ID token expiredversuchtgetUser()jetzt einen Refresh, verifiziert den neuen ID-Token und gibt den User zurück; bei fehlendem Refresh-Token → Tokens löschen, logout-Event,nullzurückgeben. Andere Verify-Fehler (Signatur, Issuer, Audience, Nonce) propagieren weiterhin — die deuten auf echte Probleme hin und dürfen nicht stillschweigend geschluckt werden.packages/authneu aufgesetzt (vitest.config.ts+ test-Script + vitest dev-dep). 3 Specs nach TDD: red → green → refactor.Nicht in diesem PR
Test plan
pnpm --filter @mrrmlab/auth test→ 3/3 grün (vorher 2/3 rot, Bug bestätigt)pnpm --filter @mrrmlab/auth --filter @mrrmlab/api-client typecheck→ grünpnpm --filter @mrrmlab/web --filter mobile typecheck→ grün (Consumer brauchen keine Anpassung; Return-Type war bereitsAuthUser | null)Consumer-Impact
4 Aufrufer in
apps/{web,mobile}rufenauth.getUser().then(setUser)ohne.catch()— Return-Type war schonAuthUser | null, daher keine Code-Änderung am Call-Site nötig. Vorher: Crash. Jetzt: geordneter Logged-Out-State.