Подключаем Recaptcha 2 к Bitrix

Возврат к списку

nocaptcha.gif

Это уже вторая статья о том,как подключить reCaptcha к CMS Bitrix. Но время идет, уже вышла новая версия reCaptcha, с новыми алгоритмами и непробиваемостью от спам ботов.

Итак, поехали, первым делом, мы добавляем сайт в личном кабинете https://www.google.com/recaptcha/admin#list , на котором у нас будет стоять защита. После регистрации система выдаст 2 ключа, ключ генерации каптчи и секретный ключ, для проверки "верно введен код или нет". После скачиваем PHP библиотеку на гитхабе. В библиотеке, из папки src копируем файлы autoload.php и папку ReCaptcha в папку php_interface предварительно создав папку include (для удобства). В файле init.php инклудим библиотеку и в нем же задаем константы: RE_SITE_KEY и RE_SEC_KEY полученные при регистрации проекта в системе.

В шаблоне сайта или компонента подключаем JS библиотеку:

Библиотека подключена, константы определены, можем использовать recaptcha в своих компонентах. Все подключается  в 2 шага: Шаг 1 - в шаблоне компоненты, добавляем следующую конструкцию, где хотим вывести защитный код:

Шаг 2 - в компоненте добавляем проверку:

В 2 шага подключается проверка которая защитит ваш компонент от спам ботов.



29.03.2016 в 19:10
0
Все сделал как написано, при добавлении в компонент проверки
Вылазиет вот это. Хелп!

Ошибка! Проверка не пройдена.missing-input-response
ответная реплика
ZircoolZircool29.03.2016 в 23:46
0
Значит не прилетел ввод каптчи, параметр $_REQUEST['g-recaptcha-response']
Можно в коде компонента, через print_r вывести $_REQUEST и посмотреть какие данные на входе. Или можешь выложить пример компоненты или часть кода — вместе разберемся.
ответная реплика
30.03.2016 в 10:09
0
как от стоп фильтра избавиться то?
ответная реплика
30.03.2016 в 10:10
0
вот что написал: массив скобка регистер да 1
ответная реплика
ZircoolZircool30.03.2016 в 10:15
0
Я увидел комментарий.У тебя не прилетает g-recaptcha-response,посмотри HTML странички где стоит рекаптча,есть ли input с именем g-recaptcha-response
ответная реплика
30.03.2016 в 11:19
0
я удалил вообще включение стандартной битриксовской капчи кроме условия ее включения // CAPTCHA?> "> <div class="line buttons clearfix"> <input name="Register" class="btn btn1" type="submit" value="<?=GetMessage('AUTH_REGISTER')?>" /> // /CAPTCHA
ответная реплика
Развернуть
30.03.2016 в 11:20 Развернуть
30.03.2016 в 11:21 Развернуть
30.03.2016 в 11:21 Развернуть
30.03.2016 в 11:21 Развернуть
adminadmin01.04.2016 в 16:03
0
Скинь пример компонента,где используешь,так быстрее найдем баг
ответная реплика
МаксимМаксим27.04.2016 в 09:12
0
Шаг 2 — надо прописать в шаблон компонента или в сам компонент? То есть в моем случае bitrix/templates/info_light_blue/components/bitrix/system.auth.registration/.default/template.php или bitrix/components/bitrix/system.auth.registration/component.php?
ответная реплика
МаксимМаксим27.04.2016 в 09:26
0
Добавил вышеозначеннный код (шаг 2) в component.php.
На странице регистрации появилась ошибка Ошибка! Проверка не пройдена.missing-input-response
Сама форма регистрации не выводится
ответная реплика
МаксимМаксим27.04.2016 в 09:29
0
Вот полностью component.php со вставленным кодом из вашего примера:

GetCurPageParam("register=yes", $arParamsToDelete);
}

$arResult["BACKURL"] = $APPLICATION->GetCurPageParam("", $arParamsToDelete);

$arResult["AUTH_AUTH_URL"] = $APPLICATION->GetCurPageParam("login=yes", $arParamsToDelete);

foreach ($arResult as $key => $value)
{
if (!is_array($value)) $arResult[$key] = htmlspecialcharsbx($value);
}

$arRequestParams = array(
"USER_NAME",
"USER_LAST_NAME",
"USER_LOGIN",
"USER_PASSWORD",
"USER_CONFIRM_PASSWORD",
);

foreach ($arRequestParams as $param)
{
$arResult[$param] = strlen($_REQUEST[$param]) > 0 ? $_REQUEST[$param] : "";
$arResult[$param] = htmlspecialcharsbx($arResult[$param]);
}
// ********************* User properties ***************************************************
$arResult["USER_PROPERTIES"] = array("SHOW" => "N");
$arUserFields = $USER_FIELD_MANAGER->GetUserFields("USER", 0, LANGUAGE_ID);
if (is_array($arUserFields) && count($arUserFields) > 0)
{
foreach ($arUserFields as $FIELD_NAME => $arUserField)
{
if ($arUserField["MANDATORY"] != "Y")
continue;
$arUserField["EDIT_FORM_LABEL"] = strLen($arUserField["EDIT_FORM_LABEL"]) > 0 ? $arUserField["EDIT_FORM_LABEL"] : $arUserField["FIELD_NAME"];
$arUserField["EDIT_FORM_LABEL"] = htmlspecialcharsEx($arUserField["EDIT_FORM_LABEL"]);
$arUserField["~EDIT_FORM_LABEL"] = $arUserField["EDIT_FORM_LABEL"];
$arResult["USER_PROPERTIES"]["DATA"][$FIELD_NAME] = $arUserField;
}
}
if (!empty($arResult["USER_PROPERTIES"]["DATA"]))
$arResult["USER_PROPERTIES"]["SHOW"] = "Y";
$arResult["bVarsFromForm"] = (is_array($arParams['AUTH_RESULT']) || strlen($arParams["AUTH_RESULT"]) 0 ? $_REQUEST["sf_EMAIL"] : $_REQUEST["USER_EMAIL"]);

$arResult["USE_CAPTCHA"] = COption::GetOptionString("main", "captcha_registration", "N") == "Y" ? "Y" : "N";

if ($arResult["USE_CAPTCHA"])
{
//$arResult["CAPTCHA_CODE"] = htmlspecialcharsbx($APPLICATION->CaptchaGetCode());
$recaptcha = new \ReCaptcha\ReCaptcha(RE_SEC_KEY);
$resp = $recaptcha->verify($_REQUEST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);

if (!$resp->isSuccess()){
foreach ($resp->getErrorCodes() as $code) {
echo "Ошибка! Проверка не пройдена.";
echo $code;
return;
}
}
}

$arResult["USE_EMAIL_CONFIRMATION"] = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y" ? "Y" : "N";

$arResult["SECURE_AUTH"] = false;
if(!CMain::IshttpS() && COption::GetOptionString('main', 'use_encrypted_auth', 'N') == 'Y')
{
$sec = new CRsaSecurity();
if(($arKeys = $sec->LoadKeys()))
{
$sec->SetKeys($arKeys);
$sec->AddToForm('bform', array('USER_PASSWORD', 'USER_CONFIRM_PASSWORD'));
$arResult["SECURE_AUTH"] = true;
}
}

$this->IncludeComponentTemplate();
ответная реплика
ZircoolZircool27.04.2016 в 13:42
0
Из кода все вставлено верно.

RE_SITE_KEY и RE_SEC_KEY определили свои?
ответная реплика
МаксимМаксим27.04.2016 в 14:13
0
Да, определил, в файле init.php, как и написано в инструкции
ответная реплика
ZircoolZircool27.04.2016 в 14:27
0
Отправь компонент с шаблоном на zircool@inbox.ru

Посмотрю,отпишусь.
ответная реплика
bolegasbolegas09.01.2017 в 13:14
0
Привет. Столкнулся с такой же проблемой в system.auth.registration. Как-то решили эту проблему?
ответная реплика
adminadmin09.01.2017 в 13:54 Развернуть
05.12.2016 в 13:01
0
Все прекрасно, только зачем лезть в компонент, когда это можно сделать через событие OnBeforeUserRegister
ответная реплика
MrEnzoMrEnzo23.01.2017 в 14:56
0
Спасибо, все получилось!
ответная реплика
инкогнитоинкогнито24.01.2017 в 21:15
+1
Если заменяете стандартную капчу битрухи, то замените echo...return; из шага 2 на $arResult["ERROR_MESSAGE"][] = "Ошибка! Проверка не пройдена."; Это избавит от Ошибка! Проверка не пройдена.missing-input-response
ответная реплика
инкогнитоинкогнито24.01.2017 в 21:18
+1
это по сути заменит стандартное сообщение, что капча не правильная, вместо досрочного выхода из метода и ломания страницы.
ответная реплика


Возврат к списку

Теги
1c addurl AutoGRAPH.NET_Service Bitrix Bootstrap chmail.ru CMS curl DLE ERP Exel gmail google hdd hide html input Java script окна javascript Jquery JS JSON keywords mail.ru memori news.list No captcha nsma PHP php php attach PR recaptcha repair retweet script Sdorgen sdorgen select sms snagit Spam Test Twitter ucoz utf-8 VK wrike X-Satellite XHE xhe yandex yandex webmaster youtube АРМ БП3 Битрикс ВТБ24 ЕГРЮЛ ЖЖ ЗУП ИТС КЛАДР МБ-8 НДФЛ ПР ПФ ТИЦ УАТ УП автограф автокликер автоматизация автопостер ап ТИЦ битрикс валюты видео внешнее соединение время грамотное написание графика даты запрета день рождение дерево значений договор заказы заполнение ТЧ запонение ТЧ запрос 1С зарплатный реестр календарь книги кодировка комментарии координаты координирование проектов меню модальное окно народ обмен обработка ок рубль организационные структуры управления проектами остатки на складе отчет плавающий блок постинг программы для управления проектами расчет расстояния сервис система управления проектами скрипт скрыть блок смс софт таймер такси управление содержанием проекта фоновые задания чекер