From e2d7655e13af6825029098c8ebfc02df9418c4ed Mon Sep 17 00:00:00 2001 From: rene Date: Fri, 22 May 2026 08:19:58 +0200 Subject: [PATCH] =?UTF-8?q?Einstellungen:=20Passwort-=C3=84ndern-Funktion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../routes/(app)/einstellungen/+page.svelte | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/app/src/routes/(app)/einstellungen/+page.svelte b/app/src/routes/(app)/einstellungen/+page.svelte index 1984c95..84a263e 100644 --- a/app/src/routes/(app)/einstellungen/+page.svelte +++ b/app/src/routes/(app)/einstellungen/+page.svelte @@ -133,6 +133,34 @@ .join(', ') || '—'; } + // Passwort ändern + let pwAlt = $state(''); + let pwNeu = $state(''); + let pwWdh = $state(''); + let pwError = $state(''); + let pwSuccess = $state(''); + let pwSaving = $state(false); + + async function passwortAendern() { + if (!pwAlt || !pwNeu) { pwError = 'Alle Felder ausfüllen.'; return; } + if (pwNeu.length < 8) { pwError = 'Neues Passwort mindestens 8 Zeichen.'; return; } + if (pwNeu !== pwWdh) { pwError = 'Passwörter stimmen nicht überein.'; return; } + pwError = ''; pwSuccess = ''; pwSaving = true; + try { + const u = get(user); + // Altes Passwort prüfen via Login + await api.post('/auth/login', { email: u?.email, password: pwAlt }); + // Neues Passwort setzen + await api.put('/users/' + u?.id, { password: pwNeu }); + pwSuccess = 'Passwort geändert.'; + pwAlt = ''; pwNeu = ''; pwWdh = ''; + } catch { + pwError = 'Altes Passwort falsch oder Fehler beim Ändern.'; + } finally { + pwSaving = false; + } + } + function abmelden() { user.clear(); goto('/login'); @@ -329,6 +357,30 @@
+ +
+

Passwort ändern

+
+ + +
+
+ + +
+
+ + +
+ {#if pwError}

{pwError}

{/if} + {#if pwSuccess}

{pwSuccess}

{/if} + +
+ +
+ Import / Export
@@ -414,6 +466,16 @@ .error { color: #dc2626; font-size: 0.875rem; margin-bottom: 0.75rem; } .success { color: #16a34a; font-size: 0.875rem; margin-bottom: 0.75rem; } + .err { color: #dc2626; font-size: 0.875rem; margin: 0.5rem 0; } + .ok { color: #16a34a; font-size: 0.875rem; margin: 0.5rem 0; } + .btn-save { + padding: 0.65rem 1.25rem; + background: #1e40af; color: #fff; + border: none; border-radius: 8px; + font-size: 0.95rem; font-weight: 600; cursor: pointer; + margin-top: 0.25rem; + } + .btn-save:disabled { opacity: 0.55; cursor: not-allowed; } .hint { color: #94a3b8; font-size: 0.95rem; } .btn-primary {