Skip to content
Code and Bytes Code and Bytes

Code and Bytes
Code and Bytes

Google reCAPTCHA v2 en Laravel 12 con Livewire 3

Posted on 6 August, 202513 August, 2025

En este tutorial detallado, aprenderás a integrar Google reCAPTCHA v2 en tu aplicación Laravel 12 utilizando Livewire 3. Esta implementación ayudará a proteger tus formularios contra bots y spam, mejorando la seguridad de tu aplicación.

Configuración Inicial

1. Configura las credenciales de reCAPTCHA

Primero, necesitas registrar tu sitio en Google reCAPTCHA para obtener tus credenciales. Luego, agrégalas a tu archivo .env:

GOOGLE_RECAPTCHA2_KEY=TU_CLAVE_DE_SITIO
GOOGLE_RECAPTCHA2_SECRET=TU_CLAVE_SECRETA

2. Editar archivo config/services.php

    'recaptcha' => [
        'public_key' => env('GOOGLE_RECAPTCHA2_KEY'),
        'secret_key' => env('GOOGLE_RECAPTCHA2_SECRET'),
    ],

Implementación en Livewire

3. Edita el componente de validación

En tu componente Livewire (app/Livewire/Auth/Login.php):

    use Illuminate\Support\Facades\Http;

    #[Validate('required')]
    public $captcha = null;

    public function updatedCaptcha($token)
    {
        $response = Http::post(
            'https://www.google.com/recaptcha/api/siteverify?secret=' .
                config('services.recaptcha.secret_key') .
                '&response=' . $token
        );

        $success = $response->json()['success'];

        if (! $success) {
            throw ValidationException::withMessages([
                'captcha' => __('Google thinks, you are a bot, please refresh and try again!'),
            ]);
        } else {
            $this->captcha = true;
        }
    }

Vista Blade con reCAPTCHA

4. Implementa la vista con el widget

En tu archivo de vista (resources/views/livewire/auth/login.blade.php):

        <div id="captcha" class="mt-4" wire:ignore></div>

        @error('captcha')
        <p class="mt-3 text-sm text-red-600 text-left">
            {{ $message }}
        </p>
        @enderror
    </form>

    <script src="https://www.google.com/recaptcha/api.js?onload=handle&render=explicit" async defer>
    </script>
    <script>
        var  handle = function(e) {
            widget = grecaptcha.render('captcha', {
                'sitekey': '{{ config('services.recaptcha.public_key') }}',
                'theme': 'light', // you could switch between dark and light mode.
                'callback': verify
            });
    
        }
        var verify = function (response) {
            @this.set('captcha', response)
        }
    </script>
Laravel PHP

Post navigation

Previous post
Next post

Related Posts

PHP Warning: file_put_contents(TelegramException.log): failed to open stream: Permission denied in …/vendor/longman/telegram-bot/src/Exception/TelegramException.php on line 24

Posted on 31 January, 20169 April, 2020

Luego de revisar la línea 24 del archivo al que hace referencia, se puede observar que trata de escribir y añadir un log. namespace Longman\TelegramBot\Exception; class TelegramException extends \Exception { public function __construct($message, $code = 0) { parent::__construct($message, $code); $path = ‘TelegramException.log’; $status = file_put_contents( $path, date(‘Y-m-d H:i:s’, time()) .’…

Read More
Laravel

Solución: Unable to create PsySH runtime directory. Make sure PHP is able to write to /run/user/1003 in order to continue.

Posted on 2 November, 202411 April, 2026

Cuando trabajamos con Laravel, php artisan tinker es una herramienta fundamental para interactuar rápidamente con nuestras aplicaciones desde la línea de comandos. Sin embargo, a veces al ejecutar este comando podemos encontrarnos con errores inesperados. Uno de ellos es el siguiente:

Read More
Laravel Laravel Eloquent

Crear, editar y eliminar con Eloquent

Posted on 12 October, 202412 October, 2024

Explorar la documentación de Laravel para realizar operaciones básicas como crear, editar o eliminar registros con Eloquent puede resultar un poco confuso. Por eso, en este artículo te ofrezco un resumen claro de los métodos que debes usar según el tipo de relación en tu modelo. 1. Relación Uno a…

Read More

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Buscar

Categorias

  • AI (2)
  • Asterisk (9)
  • Bases de datos (1)
  • DevOps (4)
  • Git (2)
  • HTML (1)
  • Laravel (6)
  • Linux (67)
  • MCP Server (1)
  • Mikrotik (3)
  • MySQL (5)
  • n8n (1)
  • Personal (4)
  • PHP (15)
  • Python (2)
  • Software recomendado (1)
  • Tips (1)
  • VSCode (4)
  • vTiger (4)
  • Windows (10)
  • Wordpress (4)
©2026 Code and Bytes | WordPress Theme by SuperbThemes