Представляю Вашему вниманию короткую статью о том, как искать объяснение непонятных явлений в битриксе. В качестве примера приведу историю — когда-то, еще на заре изучения системы, мне удалось вывести в форме авторизации капчу. Причем как это вышло, выяснить не получилось. И вот сейчас, кастомизируя очередной шаблон компонента авторизации, обнаружился код ее выводящий. Спортивный интерес и отсутствие информации в официальной документации (хотя вполне может быть, я просто не нашел то что нужно) подтолкнули меня на маленькое расследование.
Первым делом, надо посмотреть в шаблоне компонента элемент массива, в котором приходит флаг показа капчи — несложно увидеть, что это $arResult[«CAPTCHA_CODE»]. Массив arResult формируется внутри компонента, поэтому следующим шагом стало изучение содержимого bitrix\components\bitrix\system.auth.form\component.php. Найденный фрагмент кода показал, что за капчу отвечает функция NeedCAPTHAForLogin, которая по логину пользователя решает, выводить ее или нет.
if($APPLICATION->NeedCAPTHAForLogin($arResult["USER_LOGIN"])) { $arResult["CAPTCHA_CODE"] = $APPLICATION->CaptchaGetCode(); } else { $arResult["CAPTCHA_CODE"] = false; }
Api-help битрикса о назначении NeedCAPTHAForLogin рассказывать отказался, в настройках пользователя заветной галочки не оказалось. Остается найти и посмотреть исходник этой загадочной функции. С помощью Total Commander (или аналога) в директории bitrix\modules\main\ ищем файлы, содержащие текст NeedCAPTHAForLogin. Напомню, что такие исследования доступны счастливым обладателям версии в исходных кодах. Итак, результат поиска — файлик \bitrix\modules\main\classes\general\main.php. Находим кусок кода функции NeedCAPTHAForLogin, который ставит все точки над i
if(strlen($login) > 0) { $rsUser = CUser::GetList($o, $b, array("LOGIN_EQUAL_EXACT" => $login)); $arUser = $rsUser->Fetch(); if($arUser) { $arPolicy = CUser::GetGroupPolicy($arUser["ID"]); $POLICY_ATTEMPTS = intval($arPolicy["LOGIN_ATTEMPTS"]); $USER_ATTEMPTS = intval($arUser["LOGIN_ATTEMPTS"]); } }
Оказывается, вывод капчи в форме авторизации регулируется в настройках групповой политики неприметной галочкой в самом конце списка.
Приведенный способ иногда действует даже быстрее поиска по документации разработчиков. К тому же, дает возможность посмотреть на систему изнутри, понять принципы ее функционирования, и следовательно, писать более адаптированный код.
Больше статей и материалов по web-разработке в tg-канале - подписывайтесь!
Подписаться в telegram
день добрый Алексей. я только разбираюсь в битриксе, ваш блог очень помогает, спасибо большое!
Спасибо за отзыв, Sergey! Рад стараться:)
Столкнулся с необходимостью отодвинуть вывод капчи не на третью попытку а дальше. Пересмотрел все настройки в разделе «настройки продукта», начал ковырять компонент, единственное описание NeedCAPTHAForLogin в интернете нашел только у вас.
Огромное спасибо за статью!
Стандартная уже мысль, при очередном затыке — надо посмотреть у Валеева :)
В очередной раз нашел решение. Спасибо!
Спасибо! Реально помогла статья! Еще запутывает то, что в данной ситуации API битрикса при авторизации через $USER->Login() выдает сообщение «Неверный логин или пароль.», а про капчу ни слова!
Большое спасибо. Разбирался в коде и застрял именно на функции NeedCAPTHAForLogin
Файлы формата CHM обновляются ежемесячно, тем не менее, возможно некоторое отставание их от онлайновой версии курса.