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