Login-Dialog zeigt echte Server-Fehlermeldung + pwLen im Log
Tiefe Debug-Runde bewiesen: Server, DB-Passwort und App-Token-Logik sind korrekt (8/8-Repro gegen Live-Server) — abgelehnt wird ein falscher Passwort-Wert vom Gerät. Damit das künftig sofort sichtbar ist: - NavidromeService.letzterLoginFehler hält die Server-Meldung fest - Login-Dialog zeigt sie statt generischem "Login fehlgeschlagen" - Fehler-Log enthält die Passwort-Länge (nie das Passwort selbst) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JRj3pupcigUi683vy2Wwnz
This commit is contained in:
co-authored by
Claude Fable 5
parent
0776177901
commit
5d08da1086
@@ -77,6 +77,10 @@ class NavidromeService {
|
||||
String _salt = '';
|
||||
String? _token;
|
||||
|
||||
/// Server-Meldung des letzten abgelehnten Logins (z. B. „Wrong username
|
||||
/// or password"), damit der Login-Dialog die echte Ursache zeigen kann.
|
||||
String? letzterLoginFehler;
|
||||
|
||||
static const _version = '1.16.1';
|
||||
static const _client = 'Melo';
|
||||
|
||||
@@ -179,6 +183,7 @@ class NavidromeService {
|
||||
}
|
||||
|
||||
Future<bool> ping() async {
|
||||
letzterLoginFehler = null;
|
||||
try {
|
||||
final r = await http.get(_uri('ping.view')).timeout(const Duration(seconds: 10));
|
||||
if (r.statusCode != 200) {
|
||||
@@ -191,6 +196,7 @@ class NavidromeService {
|
||||
logger.info('✅ Navidrome Verbindung erfolgreich: $_serverUrl');
|
||||
return true;
|
||||
} on NavidromeException catch (e) {
|
||||
letzterLoginFehler = e.message;
|
||||
logger.warning('Navidrome Login abgelehnt: ${e.message}');
|
||||
return false;
|
||||
} catch (e) {
|
||||
|
||||
@@ -288,10 +288,15 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
if (ctx.mounted) Navigator.pop(ctx);
|
||||
if (mounted) setState(() {});
|
||||
} else if (ctx.mounted) {
|
||||
// Server-Meldung + Passwortlänge festhalten: „Wrong
|
||||
// username or password" bei pwLen=10 zeigt sofort
|
||||
// einen Tippfehler statt eines Netzwerkproblems.
|
||||
final grund = _navidrome.letzterLoginFehler;
|
||||
await logger.error(
|
||||
'Navidrome Login fehlgeschlagen (pwLeer=${passCtrl.text.isEmpty})');
|
||||
'Navidrome Login fehlgeschlagen '
|
||||
'(pwLen=${pass.length}, grund=${grund ?? 'unbekannt'})');
|
||||
setDialogState(() =>
|
||||
fehler = '❌ Login fehlgeschlagen');
|
||||
fehler = '❌ ${grund ?? 'Login fehlgeschlagen'}');
|
||||
}
|
||||
},
|
||||
child: const Text('Login',
|
||||
|
||||
Reference in New Issue
Block a user