feat(frontend): Callback-Redirect, User-Info-Cookies und Landing-Page aktualisieren #68

Closed
opened 2026-06-21 16:18:02 +00:00 by niboer · 0 comments
Owner

Beschreibung

Nach dem Login m?ssen User auf die neue /app/dashboard-Route weitergeleitet werden. Zudem wird der User-Name beim Login aus dem JWT extrahiert und in Cookies gespeichert, damit die Sidebar (Issue #66) ihn anzeigen kann. Das alte /dashboard wird entfernt.

Aenderungen

Callback (+server.ts)

  • Redirect von /dashboard auf /app/dashboard aendern (Zeile 103)
  • User-Info aus dem access_token-JWT extrahieren:
    s const payload = JSON.parse(atob(tokens.access_token.split('.')[1])); event.cookies.set('user_name', payload.name || payload.preferred_username || 'User', { ... }); event.cookies.set('user_email', payload.email || '', { ... });
  • Cookies: httpOnly: true, secure: false (dev), sameSite: 'strict', maxAge: tokens.expires_in
  • Gleiche Cookie-Options wie session_token verwenden

Logout (+server.ts)

  • user_name- und user_email-Cookies loeschen (maxAge: 0)

Landing Page (+page.svelte)

  • "Zum Dashboard"-Link von /dashboard auf /app/dashboard aendern

Altes /dashboard entfernen

  • rontend/src/routes/dashboard/-Ordner komplett loeschen
  • Kein Redirect - direkte Entfernung

Tests anpassen

  • uth-flow.test.ts: expect(location).toBe('/dashboard') auf /app/dashboard aendern
  • playground.test.ts: Alten Dashboard-Test entfernen
  • Neuer Test: Cookie-Werte nach erfolgreichem Login sind gesetzt

Dateien

  • rontend/src/routes/callback/+server.ts (aendern)
  • rontend/src/routes/logout/+server.ts (aendern)
  • rontend/src/routes/+page.svelte (aendern)
  • rontend/src/routes/dashboard/ (loeschen)
  • rontend/src/tests/auth-flow.test.ts (anpassen)
  • rontend/src/tests/playground.test.ts (anpassen)

Akzeptanzkriterien

  • Nach Login landen User auf /app/dashboard
  • user_name- und user_email-Cookies sind gesetzt
  • Nach Logout sind user_name- und user_email-Cookies geloescht
  • Landing Page-Link zeigt auf /app/dashboard
  • Altes /dashboard gibt 404 (nicht erreichbar)
  • Alle Tests laufen gruen

Aktualisierter Plan (2026-06-21)

Zusaetzlich: personId-Mapping

hooks.server.ts setzt aktuell payload.sub (Keycloak-User-UUID) als personId.
Benotigt wird die Personen-UUID. Keycloak-Provisionierung setzt username = person.id,
das landet im JWT als preferred_username. Fix: payload.sub ? payload.preferred_username || payload.sub.

Altes Dashboard sofort loschen

Das /dashboard/-Verzeichnis wird in 4a komplett geloscht (KEIN Redirect).
Callback redirectet dann auf /app/dashboard.

Commits

4a eat(frontend): Callback setzt User-Info-Cookies, personId-Mapping, altes Dashboard entfernt (refs #68)

  • callback/+server.ts: user_name/user_email-Cookies setzen, Redirect ? /app/dashboard
  • hooks.server.ts: payload.sub ? payload.preferred_username || payload.sub
  • logout/+server.ts: user_name/user_email-Cookies loschen
  • +page.svelte: Link /dashboard ? /app/dashboard
  • /dashboard/ komplett loschen

4b est(frontend): Tests fuer Callback-Redirect, Cookies und personId-Mapping (closes #68)

  • auth-flow.test.ts: Redirect /dashboard ? /app/dashboard aktualisiert
  • Neuer Test: Cookie-Werte nach Login gesetzt
  • hooks.server.test.ts: preferred_username-Test erweitert
## Beschreibung Nach dem Login m?ssen User auf die neue /app/dashboard-Route weitergeleitet werden. Zudem wird der User-Name beim Login aus dem JWT extrahiert und in Cookies gespeichert, damit die Sidebar (Issue #66) ihn anzeigen kann. Das alte /dashboard wird entfernt. ## Aenderungen ### Callback (+server.ts) - Redirect von /dashboard auf /app/dashboard aendern (Zeile 103) - User-Info aus dem access_token-JWT extrahieren: ` s const payload = JSON.parse(atob(tokens.access_token.split('.')[1])); event.cookies.set('user_name', payload.name || payload.preferred_username || 'User', { ... }); event.cookies.set('user_email', payload.email || '', { ... }); ` - Cookies: httpOnly: true, secure: false (dev), sameSite: 'strict', maxAge: tokens.expires_in - Gleiche Cookie-Options wie session_token verwenden ### Logout (+server.ts) - user_name- und user_email-Cookies loeschen (maxAge: 0) ### Landing Page (+page.svelte) - "Zum Dashboard"-Link von /dashboard auf /app/dashboard aendern ### Altes /dashboard entfernen - rontend/src/routes/dashboard/-Ordner komplett loeschen - Kein Redirect - direkte Entfernung ## Tests anpassen - uth-flow.test.ts: expect(location).toBe('/dashboard') auf /app/dashboard aendern - playground.test.ts: Alten Dashboard-Test entfernen - Neuer Test: Cookie-Werte nach erfolgreichem Login sind gesetzt ## Dateien - rontend/src/routes/callback/+server.ts (aendern) - rontend/src/routes/logout/+server.ts (aendern) - rontend/src/routes/+page.svelte (aendern) - rontend/src/routes/dashboard/ (loeschen) - rontend/src/tests/auth-flow.test.ts (anpassen) - rontend/src/tests/playground.test.ts (anpassen) ## Akzeptanzkriterien - [ ] Nach Login landen User auf /app/dashboard - [ ] user_name- und user_email-Cookies sind gesetzt - [ ] Nach Logout sind user_name- und user_email-Cookies geloescht - [ ] Landing Page-Link zeigt auf /app/dashboard - [ ] Altes /dashboard gibt 404 (nicht erreichbar) - [ ] Alle Tests laufen gruen ## Aktualisierter Plan (2026-06-21) ### Zusaetzlich: personId-Mapping hooks.server.ts setzt aktuell payload.sub (Keycloak-User-UUID) als personId. Benotigt wird die Personen-UUID. Keycloak-Provisionierung setzt username = person.id, das landet im JWT als preferred_username. Fix: payload.sub ? payload.preferred_username || payload.sub. ### Altes Dashboard sofort loschen Das /dashboard/-Verzeichnis wird in 4a komplett geloscht (KEIN Redirect). Callback redirectet dann auf /app/dashboard. ### Commits **4a** eat(frontend): Callback setzt User-Info-Cookies, personId-Mapping, altes Dashboard entfernt (refs #68) - callback/+server.ts: user_name/user_email-Cookies setzen, Redirect ? /app/dashboard - hooks.server.ts: payload.sub ? payload.preferred_username || payload.sub - logout/+server.ts: user_name/user_email-Cookies loschen - +page.svelte: Link /dashboard ? /app/dashboard - /dashboard/ komplett loschen **4b** est(frontend): Tests fuer Callback-Redirect, Cookies und personId-Mapping (closes #68) - auth-flow.test.ts: Redirect /dashboard ? /app/dashboard aktualisiert - Neuer Test: Cookie-Werte nach Login gesetzt - hooks.server.test.ts: preferred_username-Test erweitert
Sign in to join this conversation.
No description provided.