Документация для разработчиков

OnAfterUserLogin

функция-обработчик(
 array &arParams
);

Событие "OnAfterUserLogin" вызывается в методе CUser::Login после попытки авторизовать пользователя, проверив имя входа arParams['LOGIN'] и пароль arParams['PASSWORD'].

Параметры

ПараметрОписание
arParams Массив полей проверки имени входа и пароля:
  • USER_ID - в случае если авторизация прошла успешно содержит код пользователя
  • RESULT_MESSAGE - массив с информационным текстом, описывающий результат проверки пользователя, в дальнейшем используется функцией ShowMessage для вывода сообщения.
  • LOGIN - Логин пользователя
  • PASSWORD - Пароль. Если параметр PASSWORD_ORIGINAL равен"Y", то в данном параметре был передан оригинальный пароль, в противном случае был передан хеш (md5) от оригинального пароля.
  • REMEMBER - Если значение равно "Y", то авторизация пользователя должна быть сохранена в куках.
  • PASSWORD_ORIGINAL - Если значение равно "Y", то это означает что PASSWORD не был сконвертирован в MD5 (т.е. в параметре PASSWORD был передан реальный пароль вводимый пользователем с клавиатуры), если значение равно "N", то это означает что PASSWORD уже сконвертирован в MD5.

Примечание
Все параметры данного обработчика являются ссылками на исходные переменные. Поэтому, если вы измените значение параметра внутри обработчика, это приведет к смене значения исходной переменной поступившей на вход функции-обработчика.
Это позволяет, например, изменить RESULT_MESSAGE, что приведет к смене сообщения возвращаемого функцией CUser::Login.

См. также

Пример функции-обработчика:

<?
AddEventHandler("main", "OnAfterUserLogin", Array("MyClass", "OnAfterUserLoginHandler"));
class MyClass { // создаем обработчик события "OnAfterUserLogin" function OnAfterUserLoginHandler(&$fields) { // если логин не успешен то if($fields['USER_ID']<=0) { // счетчик неудавшихся попыток логина $_SESSION["AUTHORIZE_FAILURE_COUNTER"]++; // если количество неудачных попыток авторизации превышает 10, то if ($_SESSION["AUTHORIZE_FAILURE_COUNTER"]>10) { // ищем пользователя по логину $rsUser = CUser::GetByLogin($fields['LOGIN']); // и если нашли, то if ($arUser = $rsUser->Fetch()) { // блокируем бюджет пользователя $user = new CUser; $user->Update($arUser["ID"],array("ACTIVE" => "N")); // задаем сообщение $fields['RESULT_MESSAGE'] = array("TYPE" => "ERROR", "MESSAGE" => "Ваш бюджет блокирован."); } } } } } ?>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Марат Миннеханов
По аналогии с предыдущим примером авторизуем пользователя либо по логину, либо по e-mail
Код
AddEventHandler("main", "OnAfterUserLogin", Array("MyClass", "OnAfterUserLoginHandler"));

   class MyClass
   {
      function OnAfterUserLoginHandler(&$arFields)
      {
         if($arFields['USER_ID']<=0)
         {
            $_SESSION["AUTHORIZE_FAILURE_COUNTER"]++;
            if($rsUser=CUser::GetList($by="ID", $order="DESC", Array("EMAIL"=> $arFields["LOGIN"]), Array("SELECT"=>array("ID","PASSWORD"))))
               if($arUser=$rsUser->Fetch()){
                     $user = new CUser;
                     $arRes = $user->Login($arUser['LOGIN'], $arFields["PASSWORD"], $arFields["REMEMBER"]);
                     if($_SESSION["AUTHORIZE_FAILURE_COUNTER"] >=2){
                        $arFields['RESULT_MESSAGE'] = array("TYPE" => "ERROR", "MESSAGE" => "Неверный e-mail или пароль");
                        unset($_SESSION["AUTHORIZE_FAILURE_COUNTER"]);
                     }
                     else {$arFields['RESULT_MESSAGE'] = array("TYPE" => "OK", "MESSAGE" => "");
                        unset($_SESSION["AUTHORIZE_FAILURE_COUNTER"]);
                     }
               }
               else $arFields['RESULT_MESSAGE'] = array("TYPE" => "ERROR", "MESSAGE" => "Неверный логин или пароль");
         }
      }
   }


*************
комментарий от разработчика:
Цитата
Пример не совсем корректный, но для разнообразия можно с ним ознакомиться.
© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх