Phase B: Token-Provider und AuthBloc robust gegen Storage-Plugin-Fehler
Beobachtung: Nach 'flutter_secure_storage' frisch dazugepackt ohne Cold-Restart kam eine MissingPluginException auf dem AuthBloc-Stream durch (read auf channel plugins.it_nomads.com/flutter_secure_storage) und hat den ganzen Bloc-Event-Loop mitgerissen. Fix: - KeycloakOidcTokenProvider.restoreSession / _persistRefreshToken / logout fangen Plugin-Exceptions ab und loggen sie über debugPrint, statt sie hochzureichen. Restore-Pfad endet sauber mit 'kein Restore möglich', Login-Pfad hält den Token in Memory weiter. - AuthBloc._handleRestore mit eigener try/catch als zweite Schutzschicht für jeden anderen Fehler aus dem Provider. Bestehender Cold-Restart-Workaround (App stoppen + flutter run) für die ursprüngliche MissingPluginException bleibt natürlich nötig — diese Änderung sorgt nur dafür, dass künftige Storage-Probleme (Keychain zerschossen, Restore-Backup, …) nicht die Auth komplett killen.
This commit is contained in:
@ -74,10 +74,15 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
RestoreSessionRequested event,
|
||||
Emitter<AuthState> emit,
|
||||
) async {
|
||||
final restored = await tokenProvider.restoreSession();
|
||||
if (!restored) {
|
||||
// Kein gültiger Token → bleibt bei Unauthenticated, kein Snackbar
|
||||
// (das ist der normale Cold-Start-Pfad).
|
||||
try {
|
||||
await tokenProvider.restoreSession();
|
||||
// Erfolg landet via Stream als ProviderSessionChanged.loggedIn.
|
||||
// Misserfolg: bleibt bei Unauthenticated — kein Snackbar, das
|
||||
// ist der normale Cold-Start-Pfad.
|
||||
} catch (err, st) {
|
||||
debugPrint('Restore-Session fehlgeschlagen: $err\n$st');
|
||||
// State unverändert (Unauthenticated). Kein Snackbar — das
|
||||
// wäre für den Cold-Start zu viel Lärm.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user