1.7 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| project_login_loop_rootcause | Login-Loop lokal — Ursachen + Fix (gewaltiger Zeitfresser, nicht wiederholen) |
|
Der lokale Login-Loop (2026-06-02, riesiger Zeitfresser) hatte mehrere überlagerte Ursachen:
- Kern: Der PWA-Service-Worker (
navigateFallback/NavigationRoute) lieferte die gecachte App-Shell für den OIDC-Callback/?codeaus (NavigationRoute ist VOR den runtimeCaching-Routen registriert). → BE sah den Code nie →/auth/me401 → zurück zum Login → Loop. Bypass-for-network (SW aus) = sofort weg → eindeutiger SW-Beweis. - Alter SW klebte: loopte so schnell, dass das Auto-Update nicht durchkam → einmaliges Unregister/Clear nötig.
- Cookie: BE-Build via
nx servenutzt--node-env=production→secure: process.env.NODE_ENV==='production'war lokal true → Secure-Cookie über http unzuverlässig.
Fix (committet): SW auf injectManifest umgestellt (apps/plato-customer-fe/src/sw.ts, lesbar) mit Callback NetworkOnly + navigateFallbackDenylist: [...,/[?&]code=/]; Cookie secure:'auto' (mit trust proxy); ensureLoggedIn offline-tolerant; skipWaiting/clientsClaim/cleanupOutdatedCaches → Deploys lösen den SW selbst ab.
Lokales Re-Login nach BE-Neustart ist erwartbar (MemoryStore); Prod nutzt Postgres-Sessions. Session-Store-Wechsel lokal: bewusst offen gelassen.
Lehre fürs nächste Mal: bei SW/Auth-Loop SOFORT Fakten holen — generierten dist/sw.js (Routen-Reihenfolge) ansehen + echtes BE-Log; nicht raten. Siehe feedback_evidence_first, project_pwa_sw_auth_bypass.