- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/openid.php
- Класс: COpenIDClient
- Вызов: COpenIDClient::Authorize
function Authorize()
{
global $APPLICATION, $USER;
if ($arOpenID = $this->Validate())
{
$arFields = array(
'EXTERNAL_AUTH_ID' => 'OPENID#' . $arOpenID['server'],
'XML_ID' => $arOpenID['identity'],
'EMAIL' => '',
'PASSWORD' => randString(30),
'LID' => SITE_ID,
);
if (array_key_exists('openid_sreg_email', $_GET))
$arFields['EMAIL'] = $_GET['openid_sreg_email'];
if (array_key_exists('openid_sreg_gender', $_GET) && ($_GET['openid_sreg_gender'] == 'M' || $_GET['openid_sreg_gender'] == 'F'))
$arFields['PERSONAL_GENDER'] = $_GET['openid_sreg_gender'];
if (array_key_exists('openid_sreg_fullname', $_GET))
{
$fullname = trim($_GET['openid_sreg_fullname']);
if (($pos = strpos($fullname, ' ')) !== false)
{
$arFields['NAME'] = substr($fullname, 0, $pos);
$arFields['LAST_NAME'] = substr($fullname, $pos + 1);
}
else
{
$arFields['NAME'] = $fullname;
}
}
if (array_key_exists('BX_OPENID_IDENTITY', $_SESSION))
$arFields['LOGIN'] = $_SESSION['BX_OPENID_IDENTITY'];
else
$arFields['LOGIN'] = $arOpenID['identity'];
$arFields['LOGIN'] = preg_replace("#^(http://|https://)#i", "", $arFields['LOGIN']);
$USER_ID = 0;
$rsUsers = $USER->GetList($B, $O, array('XML_ID' => $arFields['XML_ID'], 'EXTERNAL_AUTH_ID' => $arFields['EXTERNAL_AUTH_ID']));
if ($arUser = $rsUsers->Fetch())
{
$USER_ID = $arUser['ID'];
}
else
{
$def_group = COption::GetOptionString('main', 'new_user_registration_def_group', '');
if($def_group != '')
$arFields['GROUP_ID'] = explode(',', $def_group);
$rsEvents = GetModuleEvents('main', 'OnBeforeOpenIDUserAdd');
while ($arEvent = $rsEvents->Fetch())
$arFields = ExecuteModuleEventEx($arEvent, array($arFields));
if ( !($USER_ID = $USER->Add($arFields)) )
return false;
}
if (intval($USER_ID) > 0)
{
$USER->Authorize($USER_ID);
$arKillParams = array("auth_service_id");
foreach (array_keys($_GET) as $k)
if (strpos($k, 'openid_') === 0)
$arKillParams[] = $k;
$redirect_url = $APPLICATION->GetCurPageParam('', $arKillParams, false);
$rsEvents = GetModuleEvents('main', 'OnBeforeOpenIDAuthFinalRedirect');
while ($arEvent = $rsEvents->Fetch())
$redirect_url = ExecuteModuleEventEx($arEvent, array($redirect_url, $USER_ID, $arFields));
if ($redirect_url)
LocalRedirect($redirect_url, true);
return $USER_ID;
}
}
return false;
}