Abmelden beendet auch die Authentik-Sitzung und springt zurück ins Tool

- Kopfleiste meldet immer über das Portal ab, auch ohne Portal-Sitzung,
  und gibt die aktuelle Seite als returnTo mit.
- Portal merkt sich den Rücksprung über den Umweg zu Authentik.
- Setup-Skript setzt den Abmelde-Ablauf des Providers 'Portal' auf
  default-invalidation-flow (der Provider-Ablauf meldet nur bei der App ab).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kerim AtilganandClaude Opus 5.5 committed 2026-10-26 09:55:42 +01:00
1 parent c674fce196
commit edc64f159a
5 files changed
+59 -8

No files matched your search

+5 -5
View File
@@ -213,7 +213,7 @@ class HiTopbar extends HTMLElement {
}
/** Erst das Tool abmelden lassen (Ereignis "hi-abmelden"), dann Portal und Authentik. */
private async logout(href: string | null): Promise<void> {
private async logout(href: string): Promise<void> {
const pending: Promise<unknown>[] = [];
const event = new CustomEvent('hi-abmelden', {
bubbles: true,
@@ -226,9 +226,9 @@ class HiTopbar extends HTMLElement {
await Promise.race([Promise.allSettled(pending), new Promise((r) => setTimeout(r, LOGOUT_WAIT_MS))]);
}
if (event.defaultPrevented) return;
// Ohne Portal-Sitzung gibt es dort nichts abzumelden; neu laden zeigt die Anmeldung des Tools.
if (href) location.href = href;
else location.reload();
// Immer über das Portal, auch ohne Portal-Sitzung: nur so endet auch die Authentik-Sitzung.
// Danach geht es zurück auf diese Seite, die dann die Anmeldung des Tools zeigt.
location.href = `${href}?returnTo=${encodeURIComponent(location.href)}`;
}
private render(): void {
@@ -291,7 +291,7 @@ class HiTopbar extends HTMLElement {
);
this.root.querySelector<HTMLAnchorElement>('[data-logout]')?.addEventListener('click', (e) => {
e.preventDefault();
void this.logout(user ? links.logout : null);
void this.logout(links.logout);
});
}
}