1С-Битрикс

Событие OnAfterUserAuthorize в 1С-Битрикс: использование и примеры

Событие OnAfterUserAuthorize в 1С-Битрикс: когда срабатывает, какие параметры передаёт, как зарегистрировать обработчик. Примеры логирования, редиректов и других действий после авторизации пользователя

sqlka.ruОпубликовано: Чтение: 4 мин.
Событие OnAfterUserAuthorize в 1С-Битрикс: использование и примеры

При разработке на платформе 1С-Битрикс часто возникает необходимость выполнить определённые действия сразу после того, как пользователь успешно авторизовался на сайте. Для этих целей система предоставляет событие OnAfterUserAuthorize. В этой статье мы рассмотрим, что это за событие, какие данные оно передаёт, как его правильно использовать и приведём несколько практических примеров.

Что такое OnAfterUserAuthorize?

OnAfterUserAuthorize — это событие ядра Битрикс, которое срабатывает непосредственно после успешной авторизации пользователя. Оно позволяет разработчикам «вклиниться» в процесс и добавить собственную логику: запись в лог, отправку уведомления, редирект на определённую страницу, синхронизацию с внешними сервисами и многое другое.

Событие относится к модулю main (главный модуль) и доступно во всех редакциях продукта.

Параметры события

Обработчик события получает один аргумент — массив, содержащий информацию о только что авторизовавшемся пользователе и обстоятельствах входа. Типовой набор ключей этого массива:

  • USER_ID — идентификатор пользователя (число).
  • arFields — массив полей пользователя (данные из таблицы b_user).
  • USER_LOGIN — логин, который был использован при входе.
  • PASSWORD — введённый пароль (обычно не хранится и не передаётся в явном виде, но присутствует в параметрах).
  • STORE_PASSWORD — флаг, указывающий, нужно ли запоминать пароль (тип авторизации).
  • REMEMBER — флаг «запомнить меня».

Важно: никогда не выводите и не логируйте пароль в открытом виде — это грубое нарушение безопасности.

Где и как регистрировать обработчик

Событие регистрируется стандартным для Битрикс способом. Чаще всего код размещают в файле /bitrix/php_interface/init.php или в собственном модуле. Пример регистрации:

// Регистрируем обработчик события OnAfterUserAuthorize
AddEventHandler("main", "OnAfterUserAuthorize", "MyAfterAuthorizeHandler");

// Функция-обработчик
function MyAfterAuthorizeHandler(&$arParams)
{
    // Ваш код
}

Обратите внимание: параметр передаётся по ссылке (&$arParams), что даёт возможность изменять данные, хотя на практике это требуется редко.

Примеры использования

1. Логирование успешных входов

Запись в системный журнал информации о каждом входе пользователя может быть полезна для аудита безопасности.

AddEventHandler("main", "OnAfterUserAuthorize", "LogUserLogin");

function LogUserLogin($arParams)
{
    $userId = (int)$arParams['USER_ID'];
    $login = htmlspecialcharsbx($arParams['USER_LOGIN']);
    $time = date('Y-m-d H:i:s');
    
    // Запись в лог-файл
    $logMessage = "[$time] Пользователь ID $userId ($login) авторизовался.\n";
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/local/logs/auth.log', $logMessage, FILE_APPEND | LOCK_EX);
}

2. Редирект после авторизации

Если после входа нужно направить пользователя не на стандартную страницу, а на специальный раздел, можно использовать редирект. Однако делать это следует с осторожностью, чтобы не создавать циклов.

AddEventHandler("main", "OnAfterUserAuthorize", "RedirectAfterLogin");

function RedirectAfterLogin($arParams)
{
    global $APPLICATION;
    
    // Проверяем, не админ ли это (чтобы админов не трогать)
    $groups = CUser::GetUserGroup($arParams['USER_ID']);
    if (!in_array(1, $groups)) { // 1 — группа администраторов
        LocalRedirect('/personal/welcome/');
    }
}

3. Установка дополнительных кук

Иногда требуется сохранить в браузере пользователя какие-то данные, например, отметку о том, что вход выполнен с определённого устройства.

AddEventHandler("main", "OnAfterUserAuthorize", "SetAuthCookie");

function SetAuthCookie($arParams)
{
    $userId = $arParams['USER_ID'];
    $deviceId = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);
    setcookie("USER_DEVICE", $deviceId, time() + 86400 * 30, "/");
}

4. Синхронизация с внешней CRM

При авторизации можно отправлять данные о пользователе во внешнюю систему через API, чтобы обновить статус или время последнего визита.

AddEventHandler("main", "OnAfterUserAuthorize", "SyncWithExternalCRM");

function SyncWithExternalCRM($arParams)
{
    $userId = $arParams['USER_ID'];
    $user = CUser::GetByID($userId)->Fetch();
    
    if ($user) {
        $data = [
            'email' => $user['EMAIL'],
            'name' => $user['NAME'],
            'last_login' => date('c')
        ];
        
        // Отправка POST-запроса к внешнему API
        $http = new \Bitrix\Main\Web\HttpClient();
        $http->post('https://crm.example.com/api/user-sync', $data);
    }
}

Важные замечания

  • Не злоупотребляйте редиректами — если перенаправлять всех пользователей, это может нарушить работу стандартной навигации и вызвать недовольство.
  • Помните о кешировании — изменение сессии или кук может влиять на кешированные страницы. В композитном режиме будьте особенно внимательны.
  • Не храните пароли — параметр PASSWORD может содержать открытый пароль, но никогда не записывайте его в логи и не передавайте третьим лицам.
  • Тестируйте на нескольких пользователях — убедитесь, что обработчик работает корректно для разных групп и сценариев.

Заключение

Событие OnAfterUserAuthorize — удобный и гибкий инструмент для расширения функционала авторизации в 1С-Битрикс. С его помощью можно реализовать практически любую дополнительную логику, не затрагивая ядро системы. Главное — соблюдать меры безопасности и не забывать о возможных побочных эффектах.

Используйте приведённые примеры как отправную точку для своих решений, адаптируя их под конкретные задачи вашего проекта.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи