From 4b8cd3eb4acad55780e89e08d0a7857bf03a7504 Mon Sep 17 00:00:00 2001 From: "XPS\\Micro" Date: Sat, 31 Jan 2026 11:57:52 +0100 Subject: [PATCH] fix: email verification improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FRONTEND_URL now generates correct URL from BASE_DOMAIN and SPAWNER_SUBDOMAIN - Fixed German umlaut in email button: 'bestaetigen' → 'bestätigen' - Added 'verified=true' parameter to backend redirect for hybrid approach - Frontend now checks 'verified' parameter and shows error if not set - Removed unused token logic from verify-success page (backend handles verification) - Added warning UI for unverified emails with resend link --- api.py | 2 +- config.py | 5 ++- email_service.py | 2 +- frontend/src/app/verify-success/page.tsx | 44 +++++++++++------------- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/api.py b/api.py index 061553c..c8b3ecc 100644 --- a/api.py +++ b/api.py @@ -190,7 +190,7 @@ def api_verify_email(): db.session.commit() current_app.logger.info(f"User {user.username} hat Email verifiziert") - return redirect(f"{frontend_url}/verify-success") + return redirect(f"{frontend_url}/verify-success?verified=true") @api_bp.route('/auth/resend-verification', methods=['POST']) diff --git a/config.py b/config.py index 0b2a71b..62d1d62 100644 --- a/config.py +++ b/config.py @@ -86,7 +86,10 @@ class Config: SMTP_USE_TLS = os.getenv('SMTP_USE_TLS', 'true').lower() == 'true' # Frontend-URL fuer Email-Links - FRONTEND_URL = os.getenv('FRONTEND_URL', f"http://localhost:3000") + FRONTEND_URL = os.getenv( + 'FRONTEND_URL', + f"{PREFERRED_URL_SCHEME}://{SPAWNER_SUBDOMAIN}.{BASE_DOMAIN}" + ) class DevelopmentConfig(Config): diff --git a/email_service.py b/email_service.py index c9d2130..2725c3c 100644 --- a/email_service.py +++ b/email_service.py @@ -58,7 +58,7 @@ def send_verification_email(user_email, username, token, base_url=None):

Vielen Dank fuer deine Registrierung beim Container Spawner.

Bitte bestatige deine Email-Adresse, indem du auf den folgenden Button klickst:

- Email bestaetigen + Email bestätigen

Oder kopiere diesen Link in deinen Browser:

diff --git a/frontend/src/app/verify-success/page.tsx b/frontend/src/app/verify-success/page.tsx index dfda6e5..16dfe41 100644 --- a/frontend/src/app/verify-success/page.tsx +++ b/frontend/src/app/verify-success/page.tsx @@ -12,37 +12,35 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { CheckCircle2, Container, Loader2 } from "lucide-react"; +import { CheckCircle2, Container, Loader2, AlertCircle, RefreshCw } from "lucide-react"; function VerifySuccessContent() { const router = useRouter(); const searchParams = useSearchParams(); - const token = searchParams.get("token"); - const [isVerifying, setIsVerifying] = useState(!!token); - const [verified, setVerified] = useState(!token); + const verified = searchParams.get("verified") === "true"; - useEffect(() => { - // Wenn ein Token in der URL ist, wurde der User vom Backend hierher redirected - // und die Verifizierung ist bereits erfolgt - if (token) { - // Kurze Verzoegerung fuer bessere UX - const timer = setTimeout(() => { - setIsVerifying(false); - setVerified(true); - }, 1000); - return () => clearTimeout(timer); - } - }, [token]); - - if (isVerifying) { + if (!verified) { return (

- - -

- Email wird verifiziert... -

+ +
+ +
+ Email nicht verifiziert + + Bitte pruefe dein Postfach oder fordere eine neue Email an. + +
+ +
+ +