- Move documentation files from root to docs/ folder - Remove DEBUG-only settings from ReadingSettingsView (Safari Reader Mode, Auto-mark as read)
42 lines
2.1 KiB
Markdown
42 lines
2.1 KiB
Markdown
# Feature: Persistentes Logout bei 401 Unauthorized
|
||
|
||
## Problemstellung
|
||
Wenn eine API-Anfrage mit einem `401 Unauthorized`-Response fehlschlägt, bedeutet dies, dass der aktuell gespeicherte Token oder die Session des Nutzers ungültig ist (z. B. durch manuelles Löschen des Tokens im Backend oder andere Ursachen).
|
||
In diesem Zustand darf der User nicht weiter mit einer scheinbar gültigen Session in der App interagieren.
|
||
|
||
## Ziel
|
||
Die App soll den Nutzer in einem solchen Fall automatisch vollständig **ausloggen** und auf den **Setup-/Login-Screen** umleiten.
|
||
Dies muss **persistiert** sein, d. h. auch nach App-Neustart darf der Nutzer nicht eingeloggt zurückkehren, solange keine erfolgreiche neue Anmeldung durchgeführt wurde.
|
||
|
||
---
|
||
|
||
## Anforderungen
|
||
|
||
1. **Erkennen von ungültigem Token**
|
||
- Jede API-Antwort mit `401 Unauthorized` löst den Logout-Prozess aus.
|
||
- Optional: Kontext beachten (z. B. ob der Request ein Refresh-Token war).
|
||
|
||
2. **Logout-Mechanismus**
|
||
- Alle gespeicherten Zugangsdaten (Access Token, Refresh Token, User-Daten im Keychain/Storage) werden gelöscht.
|
||
- UI-State wird in den "nicht eingeloggten" Zustand zurückversetzt.
|
||
- Persistenter "loggedOut"-State wird gesetzt (z. B. in `UserDefaults` oder einer App-State-DB).
|
||
|
||
3. **Persistenz**
|
||
- Falls der Nutzer die App neu startet, startet er im Setup-/Login-Screen und nicht in einem alten Session-Kontext.
|
||
|
||
4. **Wiederanmeldung**
|
||
- Sobald der Nutzer sich neu einloggt und erfolgreich ein Access Token erhält:
|
||
- wird der persistente "loggedOut"-State zurückgesetzt
|
||
- die App verhält sich wieder wie gewohnt im eingeloggten Zustand.
|
||
|
||
---
|
||
|
||
## Beispiel-Use Case
|
||
- User ist eingeloggt in die App.
|
||
- Im Backend wird manuell der Token gelöscht oder die Session invalidiert.
|
||
- Nächster API-Call → API gibt `401 Unauthorized` zurück.
|
||
- App erkennt ungültigen Zustand, **löscht alle Tokens und Session-Daten** und leitet den User sofort auf den **Setup-/Login-Screen** um.
|
||
- Auch nach einem App-Neustart startet der User weiterhin im Setup-Screen.
|
||
- Sobald der User sich erfolgreich einloggt, gelten alle API-Calls wieder normal.
|
||
|