yii2-recaptcha-widget

Yii2 component, widget and validator for Google ReCaptcha

MIT License

Downloads
45.3K
Stars
4
Committers
5

yii2-recaptcha-widget

Yii2 wrapper for Google reCAPTCHA.

Installation

The preferred way to install this extension is through composer.

Either run

$ php composer.phar require alexeevdv/yii2-recaptcha-widget "^1.0"

or add

"alexeevdv/yii2-recaptcha-widget": "^1.0"

to the require section of your composer.json file.

Configuration

Through application component

'components' => [
    //...
    'recaptcha' => [
        'class' => \alexeevdv\recaptcha\Recaptcha::class,
        'siteKey' => 'YOUR_SITE_KEY',
        'secret' => 'YOUR_SECRET',
    ],
    //...
],

Through widget and validator params

use alexeevdv\recaptcha\RecaptchaValidator;
use alexeevdv\recaptcha\RecaptchaWidget;

// Model validation rules
public function rules()
{
    return [
        //...
        [
            ['recaptcha'], 
            RecaptchaValidator::class, 
            'secret' => 'YOUR_SECRET', 
            'minimalScore' => 0.6, 
            'onScoreReceived' => function ($score) {
                // Do smth on actual user score. F.e. log it somewhere
            },
        ],
        //...
    ];
}

// Widget params
echo RecaptchaWidget::widget([
    'siteKey' => 'YOUR_SITE_KEY',
]);

Usage

use alexeevdv\recaptcha\RecaptchaValidator;
use alexeevdv\recaptcha\RecaptchaWidget;

// Using ActiveForm
// In this case model validation rules will be applied
// You'll need to specify RecaptchaValidator for attribute
echo $form->field($model, 'recaptcha')->widget(RecaptchaWidget::class);

// As standalone field
echo RecaptchaWidget::widget(['name' => 'recaptcha']);
// In this case you need to check value manually
$validator = new RecaptchaValidator();
$isValid = $validator->validateValue(Yii::$app->request->get('recaptcha'));

Usage in tests

To turn off recaptcha checking you need to add this in your test config:

'container' => [
    'definitions' => [
        \alexeevdv\recaptcha\RecaptchaValidator::class => ['skipOnEmpty' => true],
    ],
],

Additional component and widget params

/**
 * Optional. Color theme of the widget. "dark" or "light"
 * @var string
 */
public $theme;

/**       
 * Optional. The type of CAPTCHA to serve. "image" or "audio"
 * @var string
 */
public $type;

/**
 * Optional. The size of the widget. "compact" or "normal"
 * @var string
 */
public $size;

/**
 * Optional. The tabindex of the widget and challenge.
 * If other elements in your page use tabindex, it should be set to make user navigation easier.
 * @var integer
 */
public $tabindex;

/**
 * Optional. The name of your callback function, executed when the user submits a successful response.
 * The g-recaptcha-response token is passed to your callback.
 * @var string|JsExpression
 */
public $callback;

/**
 * Optional. The name of your callback function, executed when the reCAPTCHA response expires
 * and the user needs to re-verify.
 * @var string|JsExpression
 */
public $expiredCallback;

/**
 * Optional. The name of your callback function, executed when reCAPTCHA encounters an error 
 * (usually network connectivity) and cannot continue until connectivity is restored. If you specify 
 * a function here, you are responsible for informing the user that they should retry.
 * @var string|JsExpression
 */
public $errorCallback;

/**
 * Optional. Forces the widget to render in a specific language
 * If not set then language is auto detected from application language
 * If set to false then language is autodetected on client side
 */
public $language;

Package Rankings
Top 12.81% on Packagist.org
Badges
Extracted from project README
Build Status codecov