Какие функции-обработчики должны быть вызваны в каком месте (при каком событии) - нужно устанавливать вызовом функции, регистрирующей обработчики. В данный момент их две: AddEventHandler и RegisterModuleDependences.
Как правило, события делятся по месту возникновения и назначению на следующие группы:
- Предназначенные для отмены дальнейшего выполнения метода. Например, событие OnBeforeUserDeleteпозволяет отменить удаление пользователя при заданных условиях (наличие критических связанных объектов), событие OnBeforeUserLogin - запретить авторизацию пользователю;
- Позволяющие выполниться в определённых методах, при завершении их исполнения. Например, OnAfterUserLogin - после проверки имени входа и пароля, событие OnUserDelete - перед непосредственным удалением пользователя из БД, позволяет удалить связанные объекты;
- Возникающие во время исполнения страницы, для того чтобы включить свой код в определённые места на странице. Например, OnBeforeProlog, (подробнее см. порядок выполнения страниц).
Авторизация пользователей
Чтобы во время попытки авторизоваться вызвалась наша функция, необходимо установить обработчик события OnUserLoginExternal, который будет вызываться автоматически каждый раз при вводе пользователем имени входа и пароля, перед встроенной проверкой. Для этого в файле /bitrix/php_interface/init.phpвоспользуемся функцией AddEventHandler:
AddEventHandler(
"main",
"OnUserLoginExternal",
Array("__PHPBB2Auth", "OnUserLoginExternal"),
100,
$_SERVER['DOCUMENT_ROOT'].'/bitrix/php_interface/scripts/phpbb.php'
)
$arFields = Array( # new user
"LOGIN" => $login,
"NAME" => $login,
"PASSWORD" => $password,
"EMAIL" => $arRes['user_email'],
"ACTIVE" => "Y",
"EXTERNAL_AUTH_ID"=>"PHPBB2",
"LID" => SITE_ID
);
$oUser = new CUser;
$res = CUser::GetList($O, $B, Array("LOGIN_EQUAL_EXACT"=>$login, "EXTERNAL_AUTH_ID"=>"PHPBB2"));
if(!($ar_res = $res->Fetch()))
$ID = $oUser->Add($arFields);
else
{
$ID = $ar_res["ID"];
$oUser->Update($ID, $arFields);
}
if($ID>0)
{
// можно авторизовывать
return $ID;
}