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-2025, «1С-Битрикс», 2025