1C-Битрикс: Управление сайтом

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" => "Ваш бюджет блокирован."); } } } } } ?>

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

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

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
Марат Миннеханов
По аналогии с предыдущим примером авторизуем пользователя либо по логину, либо по 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-2012, «1C-Битрикс», 2012