2d4e4cdcc7
Bugfix: in der "Zugangsdaten versenden"-Mail stand bisher http://localhost:5173/portal/login als Login-Link, wenn die PUBLIC_URL-Env nicht gesetzt war – Kunden klickten auf einen toten Link. Neue Einstellung "portalLoginUrl" unter Einstellungen → Kundenportal. Wenn gepflegt, wird sie als Basis-URL für: - Portal-Zugangsdaten-Mail (Login-Link) - Passwort-Reset-Link verwendet. Reihenfolge: AppSetting → PUBLIC_URL-Env → localhost-Default. Backend: getPublicUrl() jetzt async, liest erst aus AppSetting, fällt auf Env zurück. Trailing-Slash-Bereinigung im Backend (damit Links nicht doppelt-Slash bekommen) und im Frontend (damit der gespeicherte Wert sauber ist). Frontend: neue Card "Portal-Login-URL" oberhalb der Support- Anfragen-Card in PortalSettings.tsx. Input + Save-Button + http(s)://-Schema-Validierung + Erfolgs-Toast. Live-verifiziert: PUT setzt 'https://crm.beispiel.de', Backend- getPublicUrl liefert 'https://crm.beispiel.de/portal/login' statt localhost. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>