• Модуль: 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;
}