Yii2 Captcha с простым математическим выражением

 x 

Введение

Не секрет что уже создано много продвинутых алгоритмов в помощь ботам для «пробития» капчи. Если задействовать простую алфавитно-цифровую капчу, то эти алгоритмы легко ее обойдут, а если усложнить отображение букв и цифр то будут жаловаться пользователи, потому что не поймут что там отображается. Капчу с выражением сложнее интерпретировать роботу. Установим такую капчу на нашу страницу входа на сайт, построенный на фреймворке Yii2.

При выполнении указанных задач использовался:

            a) веб сервер Apache 2.4 на Linux Mint 18

            б) установленный и настроенный composer

            в) фреймворк yii2 тип шаблона basic

Установка расширения

 x 

Добавляем в файл composer.json в раздел «require» строчку:

"hreitsma/yii2-simplemath-captcha" : "dev-master"

В терминале выполняем:

composer update
 x 

Отлично, расширение установлено. Его можно обнаружить по пути /vendor/hreitsma/yii2-simplemath-captcha.

Теперь модифицируем наш контроллер. По умолчанию это:

app\controllers\SiteController

public function actions()
{
        return [
            ...
            'captcha' => [
                'class' => 'hr\captcha\CaptchaAction',
                'operators' = >['+','-','*'],
                'maxValue' => 10,
                'fontSize' => 18,
            ],
        ];
}
 x 

Если у вас за вывод формы входа отвечает другой контроллер, то модифицируйте его. За вывод формы обычно отвечает метод: actionLogin()

 x 

В модели LoginForm нужно модифицировать метод rules(), добавить правило «verifyCode»

Если конечно, вы используете модель по умолчанию, иначе изменяйте в той модели, которая отвечает за вход на сайт

public function rules()
    {
        return [
               ...
            ['verifyCode', 'captcha'],
        ];
    }
 x 

В виде вверху добавляем:

use yii\captcha\Captcha;

После всех полей формы:

$form->field($model, 'verifyCode')->widget(Captcha::className(), [ //'captchaAction' => 'site/captcha',
    //раскомментируйте и измените если вы используете не контроллер по умолчанию или используете модуль.
    'template' => '<div class="row"><div class="col-lg-2">{image}</div><div class="col-lg-10">{input}</div></div>',
])->hint('Подсказка: кликните по = чтобы обновить выражение')->label("Результат:");

Что получилось

 x 

Теперь можно попробовать отобразить форму входа. Должно отобразиться что-то вроде:

captchasample

 x 

Если картинка не отобразится а вместо нее появится ошибка типа:

Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.

(У меня так и произошло) Необходимо доустановить недостающую библиотеку. В консоли вводим:

sudo apt install php-gd

После установки перезапускаем апач:

sudo service apache2 restart
 x 

Для капчи было использовано расширение: https://github.com/hreitsma/yii2-simplemath-captcha

Если у Вас возникли какие-либо трудности в установке, напишите в комментарии

Добавить комментарий


Защитный код
Обновить

Наверх