Skip to content

hedii/laravel-recaptcha

Repository files navigation

Build Status Total Downloads License Latest Stable Version

Laravel Recaptcha

Google reCAPTCHA v3 for Laravel 7.0+

Table of contents

Installation

Install via composer

composer require hedii/laravel-recaptcha

Publish the configuration

php artisan vendor:publish --provider="Hedii\LaravelRecaptcha\RecaptchaServiceProvider"

The configuration file located at config/recaptcha.php looks like this:

return [
    /**
     * The recaptcha site key.
     */
    'site_key' => env('RECAPTCHA_SITE_KEY', ''),

    /**
     * The recaptcha site secret.
     */
    'secret_key' => env('RECAPTCHA_SECRET_KEY', ''),

    /**
     * The minimum score (from 0.0 to 1.0) a recaptcha response must have to be
     * valid. 1.0 is very likely a good interaction, 0.0 is very likely a bot.
     */
    'minimum_score' => env('RECAPTCHA_MINIMUM_SCORE', 0.7),
];

Register a new website on Google Recaptcha admin, and select reCAPTCHA v3

Edit .env to add the required environment variables

RECAPTCHA_SITE_KEY=xxxxxxxxxxxxxxxxxxx
RECAPTCHA_SECRET_KEY=xxxxxxxxxxxxxxxxxxx
RECAPTCHA_MINIMUM_SCORE=0.7

Usage

Insert the required javascript on a html form using the following method. You can set an action name as the first parameter, and the id of the recaptcha hidden html field as a second parameter.

<form method="post">
    <!-- ...the rest of the form... -->

    {!! Recaptcha::script('contact_form', 'recaptchaResponse') !!}

    <!-- make sure you place a hidden input nammed recaptcha_response  -->
    <input type="hidden" name="recaptcha_response" id="recaptchaResponse">

    <input type="submit">
</form>

On your controller, you can verify the recaptcha score like this:

public function store(\Hedii\LaravelRecaptcha\Recaptcha $recaptcha)
{
    if (! $recaptcha->isValid()) {
        // the recaptcha score is lower than the configured minimal score, you
        // can throw a validation exception or do anything else 
        throw ValidationException::withMessages([
            'recaptcha' => 'Recaptcha validation failed...'
        ]);
    }

    // here the score is valid
}

If you prefer to use the Facade:

public function store()
{
    if (! Recaptcha::isValid()) {
        // the recaptcha score is lower than the configured minimal score, you
        // can throw a validation exception or do anything else 
        throw ValidationException::withMessages([
            'recaptcha' => 'Recaptcha validation failed...'
        ]);
    }

    // here the score is valid
}

License

laravel-recaptcha is released under the MIT Licence. See the bundled LICENSE file for details.