¿Utilizas una nueva versión de Laravel?
Puedes leer una versión actualizada de este artículo visitando el siguiente enlace: Cómo integrar Google reCAPTCHA en Laravel 8
Recientemente Google ha actualizado reCAPTCHA a la versión número 3 , agregando un feature muy interesante para los usuarios de nuestro sitio web, de forma en que ya no tendremos que completar el famoso “No soy robot” que en ocasiones desespera cuando no lo completamos correctamente.
¿Cómo funciona reCAPTCHA V3?
Tradicionalmente seleccionaríamos un par de imágenes que nos muestra el API de Google reCAPTCHA, posteriormente enviaríamos una query y nos retorna un resultado, true o false. La funcionalidad cambia drásticamente con la versión 3 ya que ahora ésta nos dará un puntaje para cada petición web que haga nuestro usuario. Esto lo hace en automático Google con inteligencia artificial, de manera en que se entrena cada vez que un usuario entra en tu sitio web.
Nosotros podemos configurar en nuestra web el porcentaje/score valido para aceptar un request post, los valores van de 0.0 a 1.0 y lo mejor de todo es que la implementación es tan sencilla como la V2.
Integrar reCAPTCHA v3 en Laravel 5.7
Requerimientos para hacer la integración:
- php: >=7.1.0
- illuminate/container: ~5.7.0
- illuminate/support: ~5.7.0
- illuminate/http: ~5.7.0
- guzzlehttp/guzzle: ^6.2
Packages utilizados:
- josiasmontag/laravel-recaptchav3 (Ver repositorio)
Instalación
Vamos a proceder a instalar una dependencia a través de composer con el siguiente comando:
composer require josiasmontag/laravel-recaptchav3
Una vez terminada la instalación del package, procederemos a modificar nuestro archivo .env para agregar dos parámetros que nos ayudarán a agregar nuestras keys de Google reCAPTCHA:
RECAPTCHAV3_SITEKEY=sitekey
RECAPTCHAV3_SECRET=secret
Modifica el valor sitekey y secret con las keys que creaste en el panel de administrador de Google reCAPTCHA. Una vez que hayas terminado de modificar este par de líneas, reinicia tu servidor si estas en localhost para que tome los nuevos parámetros.
Posteriormente vamos a publicar el archivo de configuración con el siguiente comando:
php artisan vendor:publish --provider="Lunaweb\RecaptchaV3\RecaptchaV3ServiceProvider"
Integrar en el frontend
Necesitamos ingresar primeramente el render que contendrá el JS, yo recomiendo siempre que se agregue al final de todo el html antes del cierre de <body>:
{!! RecaptchaV3::initJs() !!}
Tendremos que indicarle a Google reCAPTCHA el evento que está haciendo la petición, como por ejemplo “registro”, “login” o “contacto”. Tendrás que agregarlo dentro de tu formulario:
<form action="/contacto" method="post"> {!! RecaptchaV3::field('contacto') !!} <input type="submit" value="Enviar formulario"> </form>
Tu backend
Procederemos a verificar el response, el evento y el score de la petición.
$validar = Validator::make(Input::all(), [ 'g-recaptcha-response' => 'required|recaptchav3:contacto,0.5' ]);
Con esto vamos a validar que el campo g-recaptcha-response sea válido, que contenga el evento de contacto que le indicamos en el formulario y el score sea de mínimo 0.5 para aceptar la petición.
Con el package podemos obtener el score que reCAPTCHA nos da y generar una respuesta variable dependiendo del nivel del score, lo realizaremos de la siguiente manera:
$score = RecaptchaV3::verify($request->get('g-recaptcha-response'), 'contacto') if($score > 0.7) { // go } elseif($score > 0.3) { // require additional email verification } else { return abort(400, 'You are most likely a bot'); }
Con esto ya quedaría instalado e implementado Google reCAPTCHA V3 en Laravel, la verdad es que es extremadamente sencilla la implementación, no es nada del otro mundo. En caso de que necesites ayuda con el code, deja tu duda en los comentarios y con gusto te ayudaremos a que hagas la implementación.
Si te ha gustado el articulo por favor deja un comentario o compártelo en redes sociales, de esta manera me ayudarás a seguir trayendo contenido de calidad al blog totalmente gratis! 🙂
Un saludo virtual! 😀
Obtén beneficios exclusivos
Suscríbete al boletín y obtén beneficios exclusivos directo en tu correo.
Gracias por suscribirte...
Algo salió mal...
Buena bro, me funcionó de maravilla tu guía, solo para acotar, es que falta actualizar el comando para exportar la comfiguración del paquete, me parece que ha cambiado algo y por lo tanto no exporta correctamente. Saludos
Gracias por el comentario Franco, justo este artículo está en mi lista de artículos por actualizar, gracias por la observación.
Saludos.
hola buen dia todo estab abien hasta que me marca un error con las clase
Class ‘AppHttpControllersRecaptchaV3’ not found
no a que se deba ayuda plis
A mi también me sale ese error, help!
“g-recaptcha-response” => null porque me entrga eso cuando lo meto en un formulario
¿Estás agregando correctamente el captcha en tu formulario?, quizás haciendo un debug de tu request pueda darte más detalles sobre como estás enviando la data a tu controlador.
Bastante util, sin problemas para integrarlo
Pronto tendré una actualización para las versiones más recientes de Laravel 😉
¡Excelente aporte! Muy útil! Gracias!! Lo único que no me funcionó fue esto {!! RecaptchaV3::initJs() !!} al final del body, lo tuve que meter en el head, todo lo demás funcionó bien con Laravel 7.