'Anmeldung per E-Mail-Link', 'eyebrow' => 'Ohne Passwort anmelden', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component { #[Validate('required|string|email')] public string $email = ''; // Honeypot gegen einfache Bots – muss leer bleiben. public string $website = ''; /** * Versendet einen Anmeldelink. Deckt Bestandskonten UND hinterlegte * Pressekontakte (lazy Account) über denselben Service-Eintritt ab. * Enumeration-sicher: identische neutrale Antwort in jedem Fall. */ public function requestLink(ContactAccessService $contactAccess): void { $this->validate(); if ($this->website !== '') { // Bot: identische neutrale Antwort, keine Aktion. $this->sent(); return; } $this->ensureIsNotRateLimited(); RateLimiter::hit($this->throttleKey(), 3600); RateLimiter::hit($this->ipThrottleKey(), 3600); $contactAccess->requestMagicAccess($this->email, request()->ip()); $this->sent(); } private function sent(): void { $this->reset('email'); session()->flash('status', __('Falls für diese E-Mail-Adresse ein aktives Konto oder ein hinterlegter Pressekontakt existiert, haben wir Ihnen einen Anmeldelink geschickt.')); } /** * Versand drosseln: pro E-Mail+IP (gegen Mail-Fluten eines Accounts und das * laufende Entwerten alter Links) und zusätzlich pro IP (gegen das * Durchprobieren vieler Accounts von einer Quelle). */ protected function ensureIsNotRateLimited(): void { $withinEmail = ! RateLimiter::tooManyAttempts($this->throttleKey(), 3); $withinIp = ! RateLimiter::tooManyAttempts($this->ipThrottleKey(), 15); if ($withinEmail && $withinIp) { return; } $seconds = max( RateLimiter::availableIn($this->throttleKey()), RateLimiter::availableIn($this->ipThrottleKey()), ); throw ValidationException::withMessages([ 'email' => __('Zu viele Anfragen. Bitte versuchen Sie es in :minutes Minuten erneut.', [ 'minutes' => max(1, ceil($seconds / 60)), ]), ]); } protected function throttleKey(): string { return 'magic-link|'.Str::transliterate(Str::lower($this->email).'|'.request()->ip()); } protected function ipThrottleKey(): string { return 'magic-link-ip|'.request()->ip(); } }; ?>
@if (session('status'))
{{ session('status') }}
@endif

Geben Sie Ihre E-Mail-Adresse ein – wir senden Ihnen einen Anmeldelink, mit dem Sie sich ohne Passwort anmelden können. Das funktioniert für bestehende Konten ebenso wie für jede E-Mail, die bei einer Firma oder als Pressekontakt hinterlegt ist – Sie verwalten damit die Pressemitteilungen aller zugeordneten Firmen.

@error('email')

{{ $message }}

@enderror
{{-- Honeypot: für Menschen unsichtbar --}} Zurück zur Anmeldung