feat(#143): Registrierungs-Bestätigungsmail an User direkt nach Anmeldung

Vorher: User registriert -> Keycloak-User mit enabled=false angelegt -> KEINE
Mail bis Admin manuell freischaltet. UX-Luecke: User weiss zwischen Klick und
Admin-Freischaltung nicht, ob etwas passiert ist.

Jetzt: nach erfolgreichem Keycloak-User-Create wird sofort eine Bestaetigungs-
Mail an die angegebene Adresse geschickt mit Hinweis auf den 3-Schritt-Flow
(Anmeldung -> Admin-Freischaltung -> Passwort-Setzen-Mail). Plain-Text + HTML.
Fehler beim Mail-Versand wird geloggt aber nicht weitergereicht — User-Anlage
ist davon unabhaengig.

Response-Message angepasst: 'Wir haben dir eine Bestaetigung per E-Mail geschickt.'

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-04-27 23:40:04 +02:00
parent 6581acd28e
commit c1926ada4f

View File

@ -1083,7 +1083,37 @@ async def auth_register(
if create_resp.status_code != 201: if create_resp.status_code != 201:
raise HTTPException(status_code=500, detail="Registrierung fehlgeschlagen") raise HTTPException(status_code=500, detail="Registrierung fehlgeschlagen")
return {"status": "pending_approval", "message": "Registrierung eingegangen. Nach Freischaltung erhalten Sie eine E-Mail zum Passwort setzen."} # #143: Bestätigungsmail an User direkt nach Anmeldung
try:
from .mail import send_mail
anrede = f"{firstName} {lastName}".strip() or username
text_body = (
f"Hallo {anrede},\n\n"
f"deine Registrierung am GWÖ-Antragsprüfer ist eingegangen.\n\n"
f"Was passiert jetzt?\n"
f" 1. Ein Admin schaltet deinen Account manuell frei.\n"
f" 2. Du erhältst dann eine separate Mail mit einem Link zum Passwort-Setzen.\n"
f" 3. Anschließend kannst du dich auf https://gwoe.toppyr.de/ anmelden.\n\n"
f"Falls du nach 1-2 Werktagen nichts hörst, melde dich gerne unter mail@tobiasroedel.de.\n\n"
f"Schöne Grüße\nGWÖ-Antragsprüfer"
)
html_body = (
f"<p>Hallo <strong>{anrede}</strong>,</p>"
f"<p>deine Registrierung am <a href=\"https://gwoe.toppyr.de/\">GWÖ-Antragsprüfer</a> ist eingegangen.</p>"
f"<p><strong>Was passiert jetzt?</strong></p>"
f"<ol>"
f"<li>Ein Admin schaltet deinen Account manuell frei.</li>"
f"<li>Du erhältst dann eine separate Mail mit einem Link zum Passwort-Setzen.</li>"
f"<li>Anschließend kannst du dich auf <a href=\"https://gwoe.toppyr.de/\">gwoe.toppyr.de</a> anmelden.</li>"
f"</ol>"
f"<p>Falls du nach 1-2 Werktagen nichts hörst, melde dich gerne unter <a href=\"mailto:mail@tobiasroedel.de\">mail@tobiasroedel.de</a>.</p>"
f"<p style=\"color:#666;font-size:0.9em\">Schöne Grüße<br>GWÖ-Antragsprüfer</p>"
)
await send_mail(email, "GWÖ-Antragsprüfer — Registrierung eingegangen", text_body, html_body)
except Exception:
logger.exception("Bestätigungsmail an %s fehlgeschlagen — User-Anlage war aber erfolgreich", email)
return {"status": "pending_approval", "message": "Registrierung eingegangen. Wir haben dir eine Bestätigung per E-Mail geschickt."}
@app.get("/api/auth/pending-users") @app.get("/api/auth/pending-users")