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:
@ -390,16 +390,32 @@ class _PaymentMethodPicker extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
if (state is PaymentMethodsFailed) {
|
||||
final onError = Theme.of(context).colorScheme.onErrorContainer;
|
||||
return Card(
|
||||
margin: EdgeInsets.zero,
|
||||
color: Theme.of(context).colorScheme.errorContainer,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Text(
|
||||
state.message,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onErrorContainer,
|
||||
),
|
||||
padding: const EdgeInsets.fromLTRB(16, 8, 8, 8),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
state.message,
|
||||
style: TextStyle(color: onError),
|
||||
),
|
||||
),
|
||||
// Fehler ist kein Endzustand: der Fahrer kann das Laden
|
||||
// direkt hier erneut anstoßen (z. B. nach Netz-Aussetzer).
|
||||
TextButton.icon(
|
||||
onPressed: () =>
|
||||
context.read<PaymentMethodsCubit>().load(),
|
||||
icon: Icon(Icons.refresh, color: onError),
|
||||
label: Text(
|
||||
'Erneut laden',
|
||||
style: TextStyle(color: onError),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user