Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Полезное

Не так давно мне пришлось бороться с массовой регистрацией ботов на сайте. Вроде и не страшно, была включена необходимость подтверждения своего аккаунта, но необходимость каждодневного удаления нескольких десятков неподтвержденных аккаунтов стала со временем напрягать.

Были испробованы различные методы защиты, устанавливались капчи, форма регистрации переносилась на отдельную страницу, но ничего не помогало. Было ясно, что если за сайт взялся Хрумер, то остановить его сможет только алгоритм проверки на js. Решил обратить внимание на ReCaptcha от Google как готовое решение.

Найденный плагин из репозитория WP не сильно помог - после всех настроек так и не вывел в форме регистрации долгожданную капчу, решил разобраться и произвести интеграцию вручную, тем более, что необходимость получения данных для вывода Google ReCaptcha и в первом и во втором обязательна.

Итак, первое, что потребовалось сделать - зарегистрировать свой сайт по ссылке https://www.google.com/recaptcha/admin

Пройдя всю несложную процедуру регистрации домена, заполнив предлагаемую форму

мы получаем два ключа - публичный и секретный

и скрипт

<script src='https://www.google.com/recaptcha/api.js'></script>

который необходимо разместить в пределах тега head сайта.

После того, как предлагаемый скрипт был размещен в коде сайта, переходим к php-интеграции на стороне сервера.

Размещаем в файле functions.php используемой темы или в каком то, более удобном для вас файле:

add_action('register_form','rcl_add_google_captcha_register_form');
function rcl_add_google_captcha_register_form(){
    echo '<div class="g-recaptcha" data-sitekey="recaptcha_public_key"></div>';
}

add_filter('registration_errors','rcl_chek_google_captcha_form',10);
function rcl_chek_google_captcha_form($errors){
    
    $recaptcha_response = sanitize_text_field($_POST["g-recaptcha-response"]);
    $recaptcha_secret = 'recaptcha_secret_key';
    $response = wp_remote_get("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret."&response=".$recaptcha_response);
    $response = json_decode($response["body"], true);
    
    if (isset($response['error-codes']) && $response['error-codes']) {
        $errors = new WP_Error();
        $errors->add( 'rcl_register_google_captcha', __('Проверка Google reCAPTCHA не пройдена!') );
    }
    
    return $errors;
}

В данном коде заменяем значения recaptcha_public_key и recaptcha_secret_key на полученные ранее первый и второй ключи соответственно.

Немного подправляем стилями вывод блока ReCaptcha в форме регистрации:

.form-block-rcl .g-recaptcha{
    margin-bottom: 30px;
}
.form-block-rcl .g-recaptcha > div{
    box-sizing: border-box;
    max-width: 100%;
    width: 294px !important;
}
.form-block-rcl .g-recaptcha iframe{
    width: 100%;
}

На этом процедура интеграции Google ReCaptcha с формой регистрации WP-Recall закончена, регистрация должна предлагать к заполнению подобную форму:

Мой опыт использования данной интеграции однозначно можно назвать положительным, регистрации ботов прекратились, а проблем с регистрацией у обычных пользователей при этом не возникает.

Рекомендую данное решение всем кто устал бороться с бесконечными левыми регистрациями ботов.

 

21

Автор публикации

не в сети 13 часов

Андрей CS

12K
рассматриваю задания
Комментарии: 2742Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0