Captcha in Laravel einbinden: Middleware, Blade-Komponente und Validierung
Aktualisiert am · 6 Min. Lesezeit
Registrierung, Kontaktformular, Passwort vergessen: In jeder Laravel-Anwendung gibt es Formulare, die Bots anlocken. Mit dem Paket captchacore/laravel schützen Sie sie mit wenigen Zeilen — so, wie Sie es von Laravel gewohnt sind.
Installation
Tragen Sie das CaptchaCore-Repository in Ihre composer.json ein und installieren Sie das Paket:
"repositories": [
{ "type": "composer", "url": "https://captchacore.eu/packages" }
]
composer require captchacore/laravel
Der ServiceProvider wird automatisch erkannt. Die Schlüssel gehören in die .env:
CAPTCHACORE_URL=https://api.captchacore.eu
CAPTCHACORE_SITE_KEY=cc_pub_…
CAPTCHACORE_SECRET_KEY=cc_sec_…
Das Widget im Formular
Die Blade-Komponente gibt das Widget und das Skript aus:
<form method="post">
@csrf
<!-- Formularfelder -->
<x-captchacore::widget form-type="register" />
<button type="submit">Absenden</button>
</form>
Weil das Skript mit der Komponente kommt, lädt es nur in Views, die ein geschütztes Formular enthalten — Ihre übrigen Seiten bleiben schlank. Mehr dazu im Artikel Captcha und Ladezeit.
Prüfen: Middleware oder Validation-Rule
Entscheidend ist die Prüfung auf dem Server. Zwei Wege, je nach Stil:
// Route schützen — der Parameter ist der Formulartyp
Route::post('/register', RegisterController::class)
->middleware('captchacore:register');
// oder im FormRequest als Validation-Rule
'captchacore_token' => ['required', new CaptchaCoreToken('contact')],
Für Fälle außerhalb klassischer Formulare — etwa eigene API-Endpunkte — gibt es die Facade: CaptchaCore::verify($token, 'login'). Der Formulartyp fließt in die Bewertung ein, sodass Sie Login, Registrierung und Kontakt unterschiedlich streng behandeln können.
Tests ohne Netzwerk
In Ihren Feature-Tests soll kein echter Dienst angefragt werden. CaptchaCore::fake() ersetzt alle Prüfungen durch ein festes Ergebnis — Ihre Test-Suite bleibt schnell und unabhängig vom Netz.
Das Paket unterstützt Laravel 10 bis 13 ab PHP 8.1. Jeder API-Aufruf hat ein Timeout; Fehler landen im Laravel-Log, nie beim Besucher. Alle Optionen in der Dokumentation und auf der Seite CAPTCHA-Paket für Laravel.
Häufige Fragen
Welche Laravel-Versionen werden unterstützt?
Laravel 10, 11, 12 und 13 mit PHP 8.1 oder neuer.
Funktioniert es mit Livewire oder Inertia?
Ja. Das Widget hängt den Token an das Formular; bei Formularen, die per JavaScript abgeschickt werden, holen Sie den Token über die JavaScript-API und prüfen ihn mit der Facade.
Was passiert, wenn der Dienst nicht erreichbar ist?
Das legen Sie in der Konfiguration fest: durchlassen und protokollieren oder im Zweifel blockieren.