Integrationen

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.