Yii2 Captcha с простым математическим выражением
Введение
Не секрет что уже создано много продвинутых алгоритмов в помощь ботам для «пробития» капчи. Если задействовать простую алфавитно-цифровую капчу, то эти алгоритмы легко ее обойдут, а если усложнить отображение букв и цифр то будут жаловаться пользователи, потому что не поймут что там отображается. Капчу с выражением сложнее интерпретировать роботу. Установим такую капчу на нашу страницу входа на сайт, построенный на фреймворке Yii2.
При выполнении указанных задач использовался:
a) веб сервер Apache 2.4 на Linux Mint 18
б) установленный и настроенный composer
в) фреймворк yii2 тип шаблона basic
Установка расширения
Добавляем в файл composer.json в раздел «require» строчку:
"hreitsma/yii2-simplemath-captcha" : "dev-master"
В терминале выполняем:
composer update
Отлично, расширение установлено. Его можно обнаружить по пути /vendor/hreitsma/yii2-simplemath-captcha.
Теперь модифицируем наш контроллер. По умолчанию это:
app\controllers\SiteController
public function actions() { return [ ... 'captcha' => [ 'class' => 'hr\captcha\CaptchaAction', 'operators' = >['+','-','*'], 'maxValue' => 10, 'fontSize' => 18, ], ]; }
Если у вас за вывод формы входа отвечает другой контроллер, то модифицируйте его. За вывод формы обычно отвечает метод: actionLogin()
В модели LoginForm нужно модифицировать метод rules(), добавить правило «verifyCode»
Если конечно, вы используете модель по умолчанию, иначе изменяйте в той модели, которая отвечает за вход на сайт
public function rules() { return [ ... ['verifyCode', 'captcha'], ]; }
В виде вверху добавляем:
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("Результат:");
Что получилось
Если картинка не отобразится а вместо нее появится ошибка типа:
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
Для капчи было использовано расширение: https://github.com/hreitsma/yii2-simplemath-captcha
Если у Вас возникли какие-либо трудности в установке, напишите в комментарии


Комментарии
RSS лента комментариев этой записи