fix(auth): Session ueberlebt Netz-Aussetzer; Zahlungsmethoden laden nach Re-Login neu
Kunde meldete haeufig 'Sitzung abgelaufen' und danach dauerhaft rotes 'Sitzung abgelaufen' bei den Zahlungsmethoden trotz erfolgreichem Login. Token-Refresh: - _performRefresh wertete JEDEN Fehler als tote Session (Logout + Refresh- Token geloescht) - auch Mobilfunk-/VPN-Aussetzer. Jetzt gilt nur noch eine echte Ablehnung durch Keycloak (OAuth invalid_grant o. ae.) als abgelaufen; voruebergehende Fehler behalten die Session, nutzen den noch gueltigen Access-Token weiter oder werfen AuthTemporarilyUnavailableException - Interceptor schickt Requests nicht mehr tokenlos weiter (ergab 401 -> irrefuehrendes 'Sitzung abgelaufen'), sondern bricht als Verbindungsfehler ab - restoreSession verwirft den Refresh-Token bei fehlendem Netz nicht mehr Zahlungsmethoden: - Cubit lud nur einmal beim App-Start (vor dem Login -> 401) und blieb danach fuer immer im Fehlerzustand. Jetzt Reload bei jedem Wechsel auf Authenticated - Fehlerkarte in der Uebersicht hat einen 'Erneut laden'-Button Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@ -22,6 +22,20 @@ class HolzleitnerAuthInterceptor extends Interceptor {
|
||||
if (token != null) {
|
||||
options.headers['Authorization'] = 'Bearer $token';
|
||||
}
|
||||
} on AuthTemporarilyUnavailableException catch (e) {
|
||||
// Token ließ sich wegen eines Netz-/VPN-Problems nicht erneuern. NICHT
|
||||
// tokenlos weiterschicken — das Backend würde mit 401 antworten und die
|
||||
// UI fälschlich „Sitzung abgelaufen" zeigen. Stattdessen sauber als
|
||||
// Verbindungsfehler abbrechen; der nächste Request versucht es erneut.
|
||||
return handler.reject(
|
||||
DioException(
|
||||
requestOptions: options,
|
||||
type: DioExceptionType.connectionError,
|
||||
error: e,
|
||||
message:
|
||||
'Anmeldung konnte nicht erneuert werden (keine Verbindung zum Login-Server)',
|
||||
),
|
||||
);
|
||||
} catch (e, stack) {
|
||||
// TODO Phase B: hier ein strukturiertes Logging-Framework
|
||||
// einhängen statt print.
|
||||
|
||||
Reference in New Issue
Block a user