Im Konto-Menü (Profilbild) gibt es unter "Konto" jetzt "Passwort ändern". Die Seite fragt aktuelles Passwort, neues Passwort und Wiederholung ab (mindestens 8 Zeichen, "Passwörter anzeigen"). Am Handy ist sie eine Unterseite des Tabs, aus dem man kam; Direktlink /dashboard.html#passwort. Im Ansichtsmodus ist sie gesperrt. Server (POST /api/auth/password): - Das aktuelle Passwort wird über eine kurze Appwrite-Session geprüft, die gleich wieder gelöscht wird. Tippfehler lösen nicht die globale Login-Sperre aus. Es gibt höchstens 5 Prüfungen je Kunde und Stunde, das bleibt unter Appwrites Grenze (10 Anmeldungen je E-Mail und Stunde). - Das neue Passwort wird über die Users-API gesetzt. Fehler von Appwrite (zuletzt benutzt, zu häufig, persönliche Daten) kommen als verständliche Meldung. - Die Klartext-Kopie in customers.portalPassword und ein Alt-Eintrag in den Notizen werden geleert. Ein selbst gewähltes Passwort wird nie im Klartext gespeichert; das Ticketsystem zeigt dann "–". - Der Kunde bekommt eine Bestätigungsmail (Kopie an die Admins wie bei allen Kundenmails). Andere Geräte werden abgemeldet: Kunden-Sessions merken sich beim Login den Passwortstand (Appwrite passwordUpdate, pwv). requireSession und /api/auth/me prüfen ihn, 60 s zwischengespeichert. Das gilt auch, wenn wir im Ticketsystem ein neues Passwort setzen. Ist Appwrite nicht erreichbar, bleibt die Session gültig. Sessions von vor diesem Update haben keinen Stand und laufen normal aus (höchstens 7 Tage). Login-Seite: Hinweis auf "Passwort ändern" statt "über das Ticketsystem", dazu "Passwort vergessen?" mit support@webklar.com. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
97 lines
4.4 KiB
HTML
97 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<title>Anmelden – Webklar Kundenbereich</title>
|
||
<!-- Als App auf den Homescreen (siehe dashboard.html) -->
|
||
<link rel="manifest" href="/manifest.webmanifest">
|
||
<link rel="icon" href="/favicon.ico" sizes="32x32">
|
||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
||
<link rel="apple-touch-icon" href="/img/apple-touch-icon.png">
|
||
<meta name="theme-color" content="#09090b">
|
||
<meta name="mobile-web-app-capable" content="yes">
|
||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||
<!-- Durchsichtige Statusleiste: der lila Hintergrund reicht bis in die Notch. Damit fixierte Leisten
|
||
trotzdem ganz unten sitzen, bleibt die Seite in der installierten App immer 1 px scrollbar
|
||
(siehe "Installierte App auf dem iPhone" in login.css/kundenbereich.css) -->
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||
<meta name="apple-mobile-web-app-title" content="WEBklar">
|
||
<link rel="stylesheet" href="/login.css">
|
||
</head>
|
||
<body class="portal-page login-page">
|
||
<div class="aurora-background" aria-hidden="true">
|
||
<div class="aurora-beams"></div>
|
||
</div>
|
||
|
||
<header class="portal-header login-header">
|
||
<a class="portal-logo login-logo" href="/login.html">Webklar</a>
|
||
</header>
|
||
|
||
<main class="login-main">
|
||
<div class="login-panel">
|
||
<div class="AuthForm login-content-reveal">
|
||
<!-- Handy: App-Icon wie beim Start einer App -->
|
||
<div class="login-app-brand">
|
||
<img src="/img/app-icon-192.png" alt="" width="64" height="64">
|
||
<span>WEBklar Kundenbereich</span>
|
||
</div>
|
||
<div class="login-section">
|
||
<p class="auth-label">Anmelden</p>
|
||
<form id="login-form" class="login-form" novalidate>
|
||
<input
|
||
class="auth-input"
|
||
type="email"
|
||
name="email"
|
||
id="email"
|
||
placeholder="E-Mail"
|
||
required
|
||
autocomplete="username"
|
||
autocapitalize="none"
|
||
spellcheck="false"
|
||
enterkeyhint="next"
|
||
>
|
||
<input
|
||
class="auth-input"
|
||
type="password"
|
||
name="password"
|
||
id="password"
|
||
placeholder="Passwort"
|
||
required
|
||
autocomplete="current-password"
|
||
enterkeyhint="go"
|
||
>
|
||
<p id="login-error" class="error hidden"></p>
|
||
<button type="submit" id="login-btn" class="auth-button login-button">
|
||
<span class="button-label">Anmelden</span>
|
||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 11 10" aria-hidden="true">
|
||
<path fill="currentColor" d="m4.56 8.352 1.824-1.84q.224-.225.144-.4-.064-.192-.384-.192H0V3.76h6.128q.32 0 .4-.176.08-.192-.144-.416l-1.84-1.84L5.84 0l4.848 4.848L5.856 9.68z"></path>
|
||
</svg>
|
||
<svg class="loading-spinner" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 1 1-6.219-8.56"></path>
|
||
</svg>
|
||
</button>
|
||
</form>
|
||
</div>
|
||
<p class="login-hint">
|
||
Zugangsdaten erhältst du von Webklar. Dein Passwort kannst du nach der Anmeldung selbst ändern (Profilbild oben rechts, „Passwort ändern“).
|
||
Passwort vergessen? Schreib uns an <a href="mailto:support@webklar.com" style="color:inherit">support@webklar.com</a>.
|
||
</p>
|
||
<p class="login-hint">
|
||
<a href="/kuendigen.html" style="color:#fff;font-weight:700">Verträge hier kündigen</a> ·
|
||
<a href="/widerrufen.html" style="color:#fff;font-weight:700">Vertrag widerrufen</a><br>
|
||
<a href="/abo-bedingungen.html" target="_blank" rel="noopener" style="color:inherit">Vertragsbedingungen</a> ·
|
||
<a href="/datenschutz.html" target="_blank" rel="noopener" style="color:inherit">Datenschutz</a> ·
|
||
<a href="https://webklar.com/impressum" target="_blank" rel="noopener" style="color:inherit">Impressum</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<script src="/app.js"></script>
|
||
<script>
|
||
initLoginPage();
|
||
</script>
|
||
</body>
|
||
</html>
|