New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

mostafaznv/recaptcha

Laravel package for Google Recaptcha v3
28,820 21
Install
composer require mostafaznv/recaptcha
Latest Version:1.1.4
PHP:>=5.6.4
Laravel:5 – 8
License:MIT
Last Updated:Feb 25, 2021
Links: GitHub  ·  Packagist
Maintainer: mostafaznv

Laravel Recaptcha v3

Laravel package for Google Recaptcha v3

Some of the features for Recaptcha:

  • Configurable and Customizable
  • Callback function
  • Service Container
  • Auto discovery (only laravel 5.5+)

Requirements:

  • Laravel 5.3 or higher
  • PHP 5.6.4 or higher

Installation

  1. Install the package via composer:
    composer require mostafaznv/recaptcha
    
  2. Register Provider and Facade in config/app.php (Required for Laravel 5.3 and 5.4):
    'providers' => [
      ...
      Mostafaznv\Recaptcha\RecaptchaServiceProvider::class,
    ],
    
    
    'aliases' => [
      ...
      'Recaptcha' => Mostafaznv\Recaptcha\Facades\Recaptcha::class,
    ]
    
  3. Publish config and views:
    php artisan vendor:publish --provider="Mostafaznv\Recaptcha\RecaptchaServiceProvider"
    
  4. Done

Configuration

Add RECAPTCHA_SITE_KEY and RECAPTCHA_SECRET_KEY to .env file:

RECAPTCHA_SITE_KEY=your-site-key
RECAPTCHA_SECRET_KEY=your-secret-key

to set more, open config/recaptcha.php and set your own configurations.

return [
    'secret_key' => env('RECAPTCHA_SECRET_KEY'),
    'site_key'   => env('RECAPTCHA_SITE_KEY'),

    'is_active' => true,

    'score' => 0.5,

    'options' => [
        'timeout' => 5.0,
    ]
];

Usage

  1. Render JS
    {!! Recaptcha::renderJs() !!}
    
  2. Create Recaptcha field

    this is a hidden input field that gets filled with a recaptcha token.

    {!! Recaptcha::field('login') !!}
    
  3. Validate
    $validate = Validator::make(Input::all(), [
       'g-recaptcha-response' => 'required|recaptcha:login'
    ]);
    
  4. Done

Custom Validation Message

Add the following values to the custom array in the validation language file:

'custom' => [     
    'g-recaptcha-response' => [
        'required' => 'Please verify that you are not a robot.',
        'recaptcha' => 'Captcha error! try again later or contact site admin.',
    ],
],

Then check for captcha errors in the Form:

@if ($errors->has('g-recaptcha-response'))
    <p>{{ $errors->first('g-recaptcha-response') }}</p>
@endif

Validate Score Manually

Alternatively, you can get the score and take variable action:

$token = $request->get('g-recaptcha-response');
$action = 'home';
$score = 0;

$score = app('recaptcha')->verify($token, $action, $score);

if($score > 0.7) {
    // is valid
} 
else if($score > 0.3) {
    // require additional email verification
} 
else {
    return abort(400, 'Bad request');
}

Methods

RenderJs
Argument Index Argument Name Default Example Type Description
0 language null fa string
Field
Argument Index Argument Name Default Example Type Description
0 action home string Name of your action
1 name g-recaptcha-response recaptcha_field string Value of name attribute for hidden file input
2 attributes [] ['id' => 'recaptcha-id', 'class' => 'form-element', 'required'] array Array of attributes to render inside input field
3 callback null recaptchaCallback string Sometimes you want to use token with js. package will send token to your callback function
Validation
Argument Index Argument Name Default Example Type Description
0 action home string Name of your action
1 score loaded from config 0.7 float It's optional

Complete Example

View:
<html>
    <head>
        <title>Recaptcha v3</title>
        
        {!! Recaptcha::renderJs('fa') !!}
    </head>

    <body>
        <form action="{{ url('recaptcha-page') }}" method="post">
            {!! csrf_field() !!}
            {!! Recaptcha::field('home', 'g-recaptcha-response', ['id' => 'recaptcha-id', 'class' => 'form-element'], 'recaptchaCallback') !!}
        
            <button type="submit">Submit</button>
        </form>
        
        @if($errors->any())
            @foreach($errors->all() as $key => $error)
                <p>{{ $key }} - {{ $error }}</p>
            @endforeach
        @endif
        
        
        <script>
            function recaptchaCallback(token) {
                console.log('token retrieved:');
                console.log(token);
            }
        </script>
    </body>
</html>
Controller:
class DevController extends Controller
{
    public function verifyRecaptcha(Request $request)
    {
        $this->validate($request, ['g-recaptcha-response' => 'required|recaptcha:home,0.5']);
        dd($request->all());
    }
}

Migration Guide

from 1.0.0 to 1.1.0
  • delete app/recaptcha.php file
  • delete resources/views/vendor/recaptcha directory
  • publish vendor again
    php artisan vendor:publish --provider="Mostafaznv\Recaptcha\RecaptchaServiceProvider"
    

Changelog

Refer to the Changelog for a full history of the project.

License

This software is released under The MIT License (MIT).

(c) 2018 Mostafaznv, All rights reserved.

Related Packages

jasekz/laradrop

File manager using Dropzone.js for Laravel 5 | 6 | 7 | 8

10,308 71
victorybiz/geoip-location

Get the geographical location of website visitors based on their IP addresses. S...

179,245 21
amirzandi13/baum

Baum is an implementation of the Nested Set pattern for Eloquent models.

5,031 2

Version History

Version Released PHP Laravel License
1.1.4 >=5.6.4 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || 6.* || 7.* || 8.* MIT
1.1.3 >=5.6.4 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || 6.* || 7.* MIT
1.1.2 >=5.6.4 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || 6.* MIT
1.1.1 >=5.6.4 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* MIT
1.1.0 >=5.6.4 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.* MIT