OnUserLoginExternal
Описание и параметры
mixed функция-обработчик( array &arParams );
Событие OnUserLoginExternal предназначено для возможности проверки имени входа и пароля во внешнем источнике. Обработчики этого события вызываются в методе CUser::Login, если ни один обработчик события OnBeforeUserLogin не вернул false, перед стандартной проверкой имени входа arParams['LOGIN'], пароля arParams['PASSWORD'] и попытки авторизовать пользователя.
Параметры
Параметр | Описание |
---|---|
arParams | Массив полей для проверки имени входа и пароля:
|
Примечание. Параметр данного обработчика и элементы массива arParams являются ссылками на исходные переменные. Поэтому если вы измените значение параметра внутри обработчика, это приведет к смене значения исходной переменной поступившей на вход функции-обработчика.
Возвращаемое значение
Если необходимо авторизовать пользователя, то обработчик события должен вернуть идентификатор этого пользователя.Смотрите также
- Событие "OnBeforeUserLogin"
- Событие "OnAfterUserLogin"
- CUser::Login
- События
- Внешняя авторизация
Пример функции-обработчика
<? // пример авторизации пользователя из таблиц форума Innovision Power Board // файл /bitrix/php_interface/init.php AddEventHandler("main", "OnUserLoginExternal", Array("__IPBAuth", "OnUserLoginExternal")); AddEventHandler("main", "OnExternalAuthList", Array("__IPBAuth", "OnExternalAuthList")); define("IPB_TABLE_PREFIX", "ibf_"); define("IPB_VERSION", "2"); class __IPBAuth { public static function OnUserLoginExternal(&$arArgs) { $groups_map = Array( /*'IPB Group ID' => 'Local Group ID',*/ '4' => '1' ); $table_user = IPB_TABLE_PREFIX."members"; $table_converge = IPB_TABLE_PREFIX."members_converge"; global $DB, $USER, $APPLICATION; extract($arArgs); if(IPB_VERSION == '1') { $strSql = "SELECT * FROM ".$table_user." WHERE name='". $DB->ForSql($LOGIN)."' AND password='".md5($PASSWORD)."'"; } else { $strSql = "SELECT t1.* ". "FROM ".$table_user." t1, ".$table_converge." t2 ". "WHERE t1.name='".$DB->ForSql($LOGIN)."' ". " AND t1.email = t2.converge_email ". " AND t2.converge_pass_hash = MD5(CONCAT(MD5(t2.converge_pass_salt), '".md5($PASSWORD)."'))"; } $dbAuthRes = $DB->Query($strSql); if($arAuthRes = $dbAuthRes->Fetch()) { $arFields = Array( "LOGIN" => $LOGIN, "NAME" => $arAuthRes['title'], "PASSWORD" => $PASSWORD, "EMAIL" => $arAuthRes['email'], "ACTIVE" => "Y", "EXTERNAL_AUTH_ID"=>"IPB", "LID" => SITE_ID ); $oUser = new CUser; $res = CUser::GetList($O, $B, Array("LOGIN_EQUAL_EXACT"=>$LOGIN, "EXTERNAL_AUTH_ID"=>"IPB")); if(!($ar_res = $res->Fetch())) $ID = $oUser->Add($arFields); else { $ID = $ar_res["ID"]; $oUser->Update($ID, $arFields); } if($ID>0) { $USER->SetParam("IPB_USER_ID", $arAuthRes['id']); $user_group = $arAuthRes['mgroup']; $arUserGroups = CUser::GetUserGroup($ID); foreach($groups_map as $ext_group_id => $group_id) { if($ext_group_id==$user_group) $arUserGroups[] = $group_id; else { $arUserGroupsTmp = Array(); foreach($arUserGroups as $grid) if($grid != $group_id) $arUserGroupsTmp[] = $grid; $arUserGroups = $arUserGroupsTmp; } } CUser::SetUserGroup($ID, $arUserGroups); $arParams["STORE_PASSWORD"] = "N"; return $ID; } } } public static function OnExternalAuthList() { return Array( Array("ID"=>"IPB", "NAME"=>"Invision Power Board") ); } }?>
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.