Auth: Nur noch Magic Link, Code-Verifizierung entfernt

- /api/auth/verify-code Endpoint entfernt
- generate_magic_code() entfernt
- E-Mail: Nur noch Anmelde-Link, kein 6-stelliger Code
- Login-Seite: Zeigt nach E-Mail-Eingabe Hinweis statt Code-Feld
- Magic Link Token-Verifikation via URL bleibt bestehen
Dieser Commit ist enthalten in:
Claude Dev
2026-03-25 00:01:21 +01:00
Ursprung bd2c274dd2
Commit af08fa6b4d
5 geänderte Dateien mit 69 neuen und 183 gelöschten Zeilen

Datei anzeigen

@@ -15,12 +15,11 @@
.logo p { font-size:11px; color:var(--text-dim); margin-top:4px; }
.form-group { margin-bottom:20px; }
label { display:block; font-size:10px; letter-spacing:1.5px; color:var(--text-dim); margin-bottom:6px; text-transform:uppercase; }
input[type="email"], input[type="text"] {
input[type="email"] {
width:100%; padding:12px 14px; background:rgba(255,255,255,0.05); border:1px solid var(--border);
border-radius:6px; color:var(--text); font-family:var(--mono); font-size:14px; outline:none; transition:border-color 0.2s;
}
input:focus { border-color:var(--accent); }
.code-input { text-align:center; letter-spacing:8px; font-size:24px; font-weight:700; }
.btn {
width:100%; padding:12px; background:rgba(0,255,136,0.1); border:1px solid var(--accent);
border-radius:6px; color:var(--accent); font-family:var(--mono); font-size:13px; font-weight:700;
@@ -28,12 +27,11 @@
}
.btn:hover { background:rgba(0,255,136,0.2); }
.btn:disabled { opacity:0.4; cursor:not-allowed; }
.btn-secondary { background:none; border-color:var(--border); color:var(--text-dim); }
.btn-secondary:hover { border-color:var(--accent); color:var(--accent); }
.error { color:#ff4444; font-size:12px; margin-top:8px; display:none; }
.success { color:var(--accent); font-size:12px; margin-top:8px; display:none; }
.step { display:none; }
.step.active { display:block; }
.back-link { display:block; text-align:center; margin-top:16px; font-size:11px; color:var(--text-dim); cursor:pointer; }
.back-link:hover { color:var(--accent); }
</style>
</head>
<body>
@@ -52,20 +50,21 @@
<label>E-Mail-Adresse</label>
<input type="email" id="input-email" placeholder="name@beispiel.de" autofocus>
</div>
<button class="btn" id="btn-send" onclick="requestLink()">Zugangscode anfordern</button>
<button class="btn" id="btn-send" onclick="requestLink()">Anmelde-Link anfordern</button>
<div class="error" id="error-email"></div>
</div>
<!-- Step 2: Code -->
<div id="step-code" class="step">
<div class="form-group">
<label>6-stelliger Zugangscode</label>
<input type="text" id="input-code" class="code-input" maxlength="6" placeholder="------" inputmode="numeric" pattern="[0-9]*">
<!-- Step 2: Link gesendet -->
<div id="step-sent" class="step">
<div style="text-align:center; padding: 16px 0;">
<div style="font-size: 36px; margin-bottom: 16px;">&#9993;</div>
<p style="color:var(--text-dim); font-size:13px; margin-bottom:8px;">Anmelde-Link wurde gesendet an</p>
<p style="color:var(--accent); font-size:14px; font-weight:700; margin-bottom:16px;" id="sent-email"></p>
<p style="color:var(--text-dim); font-size:12px; line-height:1.6;">
Bitte prüfe dein Postfach und klicke auf den Link in der E-Mail.
</p>
</div>
<div class="success" id="success-code" style="display:block;margin-bottom:16px;">Zugangscode wurde per E-Mail gesendet.</div>
<button class="btn" id="btn-verify" onclick="verifyCode()">Verifizieren</button>
<div class="error" id="error-code"></div>
<span class="back-link" onclick="showStep('email')">Andere E-Mail verwenden</span>
<button class="btn btn-secondary" style="margin-top:20px;" onclick="showStep('email')">Andere E-Mail verwenden</button>
</div>
</div>
@@ -105,48 +104,18 @@
if (!resp.ok) {
showError('error-email', data.detail || 'Fehler');
} else {
showStep('code');
document.getElementById('input-code').focus();
document.getElementById('sent-email').textContent = email;
showStep('sent');
}
} catch (e) {
showError('error-email', 'Verbindungsfehler');
}
btn.disabled = false;
btn.textContent = 'Zugangscode anfordern';
}
async function verifyCode() {
var code = document.getElementById('input-code').value.trim();
var email = document.getElementById('input-email').value.trim();
if (!code || code.length !== 6) return;
var btn = document.getElementById('btn-verify');
btn.disabled = true;
btn.textContent = 'Pruefe...';
document.getElementById('error-code').style.display = 'none';
try {
var resp = await fetch('/api/auth/verify-code', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: email, code: code }),
});
var data = await resp.json();
if (!resp.ok) {
showError('error-code', data.detail || 'Fehler');
} else {
localStorage.setItem('globe_token', data.token);
window.location.href = '/';
}
} catch (e) {
showError('error-code', 'Verbindungsfehler');
}
btn.disabled = false;
btn.textContent = 'Verifizieren';
btn.textContent = 'Anmelde-Link anfordern';
}
// Enter-Taste
document.getElementById('input-email').addEventListener('keydown', function(e) { if (e.key === 'Enter') requestLink(); });
document.getElementById('input-code').addEventListener('keydown', function(e) { if (e.key === 'Enter') verifyCode(); });
</script>
</body>
</html>