Phase B+1 Nachzügler: LAN-IP-Config, SessionExpired-Legacy, Logout in CarSelection
- BackendConfig.localDev nutzt jetzt die LAN-IP des Dev-Macs (192.168.0.138) statt localhost. Notwendig zum Testen auf einem realen Android-Gerät über WLAN. Auf dem iOS-Simulator zurückwechseln oder per Build-Flag injizieren. - AuthBloc.on<SessionExpiredEvent> wird zum No-Op (mit Log). Begründung: die alten ERPframe-Repos rufen das nach jedem 401 auf, weil ihr Cookie-Login serverseitig weg ist. Solange Phase D diese Repos nicht ersetzt hat, wäre ein echter Logout daraus fatal — der erste TourBloc-Load nach Keycloak-Login würde die Session sofort wieder wegwerfen. Die legitime SessionExpired-Quelle bleibt der Provider-Stream (Refresh-Failure). - CarSelectionPage hat jetzt durchgehend eine AppBar (vorher nur im 'wechseln'-Modus) plus ein Account-Popup oben rechts mit Personalnummer + roter Abmelden-Aktion. Der Drawer ist sonst nur an Home, und solange Cars-Loading per 401 blockt, kommt der User ohne Pre-Home-Logout nicht raus.
This commit is contained in:
@ -23,13 +23,19 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
on<LogoutRequested>(_handleLogout);
|
||||
on<RestoreSessionRequested>(_handleRestore);
|
||||
on<ProviderSessionChanged>(_handleProviderEvent);
|
||||
// Legacy: ERPframe-Repos feuern bei 401.
|
||||
// Legacy: alte ERPframe-Repos rufen authBloc.add(SessionExpiredEvent())
|
||||
// bei jedem 401, weil ihr Cookie-Login serverseitig nicht mehr
|
||||
// existiert. Solange Phase D diese Repos nicht ersetzt hat, wäre
|
||||
// ein echter Logout daraus fatal: der erste TourBloc-Load nach
|
||||
// erfolgreicher Keycloak-Anmeldung würde die Session sofort wieder
|
||||
// wegwerfen. Daher hier nur loggen, **nicht** ausloggen — die
|
||||
// legitime SessionExpired-Quelle ist der Provider-Stream
|
||||
// (AuthSessionExpired bei Refresh-Failure).
|
||||
on<SessionExpiredEvent>((event, emit) async {
|
||||
await tokenProvider.logout();
|
||||
if (locator.isRegistered<Authenticated>()) {
|
||||
locator.unregister<Authenticated>();
|
||||
}
|
||||
emit(Unauthenticated(sessionExpired: true));
|
||||
debugPrint(
|
||||
'[AuthBloc] SessionExpiredEvent aus Legacy-Repo ignoriert — '
|
||||
'echter SessionExpired kommt vom KeycloakOidcTokenProvider.',
|
||||
);
|
||||
});
|
||||
|
||||
_subscription = tokenProvider.events.listen(
|
||||
|
||||
Reference in New Issue
Block a user