From 9dc83f7bcbb8d7aa5eef4a741c58cff4afeac9ab Mon Sep 17 00:00:00 2001 From: Bernd Steckmeister Date: Fri, 3 Jul 2026 09:51:40 +0200 Subject: [PATCH] fix: Refresh-Token beim Login anfordern (Uta-Random-Logout, M1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ursache gefunden: Ohne Refresh-Token eskaliert das matrix-SDK jeden Soft-Logout (z. B. abgelaufenes Access-Token, M_UNKNOWN_TOKEN mit soft_logout=true) automatisch zu einem echten, destruktiven Logout — _handleSoftLogout() versucht refreshAccessToken(), das ohne gespeicherten Refresh-Token sofort mit "No refresh token available" scheitert, und ruft danach client.logout() auf (client.dart:2374-2384 im matrix-Paket, Version 6.2.0). Mit refreshToken: true beim Login bekommt der Client vom Server einen Refresh-Token und kann einen Soft-Logout künftig durch stillen Token-Refresh überstehen, statt die Sitzung zu zerstören. Falls der Server keine Refresh-Tokens unterstützt, bleibt das Verhalten unverändert (response.refreshToken ist dann null). Wichtig: gilt nur für neue Logins. Bereits eingeloggte Geräte (z. B. Uta) profitieren erst nach einmaligem Neu-Login. Zur Diagnose siehe den mit 63e4919 eingeführten AuthLog. UNGETESTET (Pi, kein GUI/Login hier möglich) – nächster PC-Lauf muss den vollen Kreislauf prüfen: Login → Nachrichten → Logout → erneuter Login → alte verschlüsselte Nachrichten noch lesbar? --- CHANGES.md | 1 + lib/features/auth/login_notifier.dart | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 927b236..7ac3c4a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1133,3 +1133,4 @@ 2026-07-03 09:50 [Edit] /home/steggi/pyramid/lib/widgets/settings_modal.dart 2026-07-03 09:50 [Edit] /home/steggi/pyramid/lib/widgets/settings_modal.dart 2026-07-03 09:50 [Edit] /home/steggi/pyramid/lib/widgets/settings_modal.dart +2026-07-03 09:51 [Edit] /home/steggi/pyramid/lib/features/auth/login_notifier.dart diff --git a/lib/features/auth/login_notifier.dart b/lib/features/auth/login_notifier.dart index 1b778ff..34dbc38 100644 --- a/lib/features/auth/login_notifier.dart +++ b/lib/features/auth/login_notifier.dart @@ -76,6 +76,12 @@ class LoginNotifier extends StateNotifier { identifier: mx.AuthenticationUserIdentifier(user: username), password: password, initialDeviceDisplayName: deviceName ?? 'Pyramid', + // Ohne Refresh-Token eskaliert das SDK jeden Soft-Logout (z. B. nach + // Ablauf des Access-Tokens) sofort zu einem echten, destruktiven + // Logout, weil `refreshAccessToken()` sonst mangels Refresh-Token + // fehlschlägt (siehe matrix-Paket Client._handleSoftLogout). Das ist + // der wahrscheinlichste Auslöser des Uta-Random-Logout-Bugs. + refreshToken: true, ); if (Platform.isAndroid) unawaited(initFcm(client));