reCaptcha 2 in Laravel einbauen

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.