Para exemplificar usaremos o formulário de cadastro de usuário do Laravel
php artisan make:auth
http://localhost:8000/register
resources\views\layouts\app.blade.php
@stack('scripts')
@push('scripts')
<script src='https://www.google.com/recaptcha/api.js'></script>
@endpush
@extends('layouts.app')
@include('recaptcha')
RECAPTCHA_SITE_KEY=
RECAPTCHA_SECRET_KEY=
RECAPTCHA_SITEVERIFY=https://www.google.com/recaptcha/api/siteverify
protected function validator(array $data)
{
$messages = [
'g-recaptcha-response.required' => 'Você é um robo?',
];
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'g-recaptcha-response' => ['required' , new Recaptcha],
], $messages);
}
$messages
guarda as mensagens personalizadasg-recaptcha-response
passamos um array de regras, o primeiro 'required'
é para testar se o captcha foi marcadonew Recaptcha
é uma regra personalizada(https://laravel.com/docs/5.6/validation#custom-validation-rules) que irá verificar se o captcha é valido, validando no Googlephp artisan make:rule Recaptcha
public function passes($attribute, $value)
{
$params = ['secret' => env('RECAPTCHA_SECRET_KEY'), 'response' => $value];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, env('RECAPTCHA_SITEVERIFY'));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($curl);
curl_close($curl);
$arr = json_decode($resp, true);
return $arr['success'];
}
public function message()
{
return 'Não foi possível validar o captcha';
}
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="g-recaptcha" data-sitekey="{{env('RECAPTCHA_SITE_KEY')}}"></div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="container">
@include('shared.errors')