From 5115e37b472603de685e64faf97e6063d1c959f0 Mon Sep 17 00:00:00 2001 From: "XPS\\Micro" Date: Sun, 1 Feb 2026 17:04:07 +0100 Subject: [PATCH] feat: improve signup UX - send login link if email already registered When user tries to signup with an already registered email, the system now sends a login link instead of showing an error. This improves UX and prevents user enumeration attacks. The response message is identical for both new registrations and existing emails. --- api.py | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/api.py b/api.py index 55dcf31..c9dd2a5 100644 --- a/api.py +++ b/api.py @@ -101,7 +101,41 @@ def api_signup(): # Prüfe ob Email bereits registriert existing_user = User.query.filter_by(email=email).first() if existing_user: - return jsonify({'error': 'Diese Email-Adresse ist bereits registriert'}), 409 + # Statt Fehler: Sende Login-Link (bessere UX, verhindert User-Enumeration) + if existing_user.is_blocked: + return jsonify({'error': 'Dein Account wurde gesperrt'}), 403 + + # Rate-Limiting prüfen + if not check_rate_limit(email): + return jsonify({'error': 'Zu viele Anfragen. Bitte versuche es später erneut.'}), 429 + + # Generiere Magic Link Token für Login + token = generate_magic_link_token() + expires_at = datetime.utcnow() + timedelta(seconds=Config.MAGIC_LINK_TOKEN_EXPIRY) + + magic_token = MagicLinkToken( + user_id=existing_user.id, + token=token, + token_type='login', + expires_at=expires_at, + ip_address=request.remote_addr + ) + db.session.add(magic_token) + db.session.commit() + + # Sende Email + try: + send_magic_link_email(email, token, 'login') + except Exception as e: + current_app.logger.error(f"Email-Versand fehlgeschlagen: {str(e)}") + return jsonify({'error': 'Email konnte nicht gesendet werden'}), 500 + + current_app.logger.info(f"[SIGNUP] Email {email} existiert bereits - Login-Link gesendet") + + # Gleiche Nachricht wie bei Neuregistrierung (verhindert User-Enumeration) + return jsonify({ + 'message': 'Registrierungs-Link wurde an deine Email gesendet. Bitte überprüfe dein Postfach.' + }), 200 # Rate-Limiting if not check_rate_limit(email):