'Konto erstellen', 'eyebrow' => 'Registrierung im Publisher-Hub', 'topRightLabel' => 'Bereits Konto?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component { public string $name = ''; public string $email = ''; public string $password = ''; public string $password_confirmation = ''; public bool $terms_accepted = false; /** * Handle an incoming registration request. */ public function register(): void { $validated = $this->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], 'password' => ['required', 'string', 'confirmed', Rules\Password::defaults()], 'terms_accepted' => ['accepted'], ], [ 'terms_accepted.accepted' => 'Bitte bestätigen Sie unsere AGB und die Datenschutzerklärung.', ]); // Bot-/Massenanmeldungen drosseln (R6.2): pro IP, großzügig genug // für legitime Mehrfachversuche. if (RateLimiter::tooManyAttempts('register-ip|'.request()->ip(), 10)) { throw ValidationException::withMessages([ 'email' => __('Zu viele Registrierungen. Bitte versuchen Sie es später erneut.'), ]); } RateLimiter::hit('register-ip|'.request()->ip(), 3600); // Die bestätigte AGB-/Datenschutz-Checkbox wird als DSGVO-Einwilligung // mit Zeitstempel festgehalten (users.gdpr_consent_at). unset($validated['terms_accepted']); $validated['gdpr_consent_at'] = now(); $validated['password'] = Hash::make($validated['password']); // Ohne expliziten Typ greift der DB-Default `existing_legacy` (für den // Legacy-Import gedacht). Selbst-Registrierungen sind Neukunden — // gleicher Default wie im CustomerAccountProvisioner. $validated['registration_type'] = RegistrationType::Company->value; // Konto bleibt bis zur E-Mail-Verifizierung inaktiv und rollenlos // (Entscheidung 15.06.). Rolle + Aktivierung erfolgen erst nach dem // bestätigten Verifizierungslink (ActivateUserAfterVerification). $validated['is_active'] = false; // Das Registered-Event versendet über den verdrahteten // SendEmailVerificationNotification-Listener die Bestätigungsmail. event(new Registered($user = User::create($validated))); Auth::login($user); // Direkt zur Bestätigungs-/Notice-Seite. Ohne navigate:true, weil das // Panel ein anderes Vite-Bundle nutzt als das Hub-Auth-Layout. $this->redirect(route('verification.notice', absolute: false)); } }; ?>