Problemstellung in unserer Internetagentur aktuell: Wie sichere ich mein Kontaktformular ab mit dem Google reCaptcha v2? Erst einmal holen wir uns die benötigte Erweiterung von Biscolab mit dem Composer via require biscolab/laravel-recaptcha. Danach folgen wir dem Manual unter https://laravel-recaptcha-docs.biscolab.com/docs/intro und erstellen via php artisan vendor:publish --provider="Biscolab\ReCaptcha\ReCaptchaServiceProvider" die Konfigurationsdatei und tragen unsere vorher bei Google beantragten Schlüssel (Site Key und Secret Key) ein in die Datei ".env".
Nun rufen wir die benötigte Funktion auf in unserer Header-Datei:
\resources\views\layouts\partials\header.blade.php mit Hilfe des Snippets
{!! htmlScriptTagJsApi($configuration) !!}
und integrieren dann das reCaptcha in das betreffende Formular, bei uns:
/resources/views/pages/contact.blade.php
Hier muss das Snippet
{!! htmlFormSnippet() !!}
eingetragen werden und evtl. noch eine Fehlerausgabe mit
<div class="form-group{{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}">
<div class="col-lg-offset-3 col-lg-9 col-md-offset-4 col-md-8 col-sm-offset-5 col-sm-7">
{!! htmlFormSnippet() !!}
@if ($errors->has('g-recaptcha-response'))
<span class="help-block">
<strong>{{ $errors->first('g-recaptcha-response') }}</strong>
</span>
@endif
</div>
</div>
Dann müssen wir noch das reCaptcha in die Validierung eintragen. Dies machen wir in der Datei
/app/Http/Controllers/ContactController.php
in der Funktion
public function sendForm(Request $request)
mit der zusätzlichen Zeile
recaptchaFieldName() => recaptchaRuleName(),
Dann tragen wir noch die gewünschten Fehlermeldungen in den vorhandenen Sprachen ein, bei uns z.B. in
/resources/lang/de/validation.php
und
/resources/lang/en/validation.php
Der Identifier heißt hier "recaptcha", also könnte die Zeile im Deutschen z.B. heißen
'recaptcha' => 'Bitte die Checkbox "Ich bin kein Roboter" anklicken!'
Das war's! Getestet in unserer Internetagentur mit einer Website mit Laravel 6.0.4.