Главная » API Битрикс » CUser » CUser::Authorize — программная авторизация пользователя

CUser::Authorize — программная авторизация пользователя

Схема программной авторизации в Битрикс: CUser::Authorize входит под пользователем без формы входа

CUser::Authorize авторизует пользователя программно — без формы входа, без проверки пароля через интерфейс. Метод нужен там, где вход происходит по иной логике: после подтверждения по ссылке из письма, после успешной оплаты гостевого заказа, при входе через внешний сервис.

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

Базовый вызов

<?php

global $USER;

$result = $USER->Authorize($userId);

if ($result) {
    // пользователь авторизован
} else {
    // авторизация не удалась
    echo $USER->LAST_ERROR;
}

Важная деталь: метод вызывается у глобального объекта $USER, а не статически у класса. $USER — это и есть экземпляр CUser, представляющий текущего посетителя; после успешного вызова именно он становится авторизованным пользователем сессии.

Дополнительные параметры

<?php

$USER->Authorize(
    $userId,
    false,   // сохранять ли авторизацию через cookie надолго
    true,    // обновлять ли дату последней активности
    false    // "тихая" авторизация без записи в лог событий безопасности
);
ПараметрНазначение
ID пользователяКого авторизовать
Долгая сессияАналог флажка «Запомнить меня»
Обновление активностиПишется ли текущий момент как дата последнего визита
Событие безопасностиФиксируется ли вход в журнал для проактивной защиты

Нужна помощь с Битрикс?





    Типичный сценарий: вход по ссылке из письма

    <?php
    
    use Bitrix\Main\Loader;
    
    $userId = (int)$_GET['user_id'];
    $hash   = (string)$_GET['hash'];
    
    $expectedHash = md5($userId . 'секретная_соль');
    
    if ($hash !== $expectedHash) {
        // ссылка недействительна
        return;
    }
    
    global $USER;
    $USER->Authorize($userId);

    Здесь принципиально важна проверка подписи ссылки. Без неё Authorize превращается в уязвимость: любой, кто узнает или подберёт идентификатор, сможет войти под чужим пользователем, просто изменив параметр в адресе.

    Проверка результата

    Метод возвращает false, если пользователь не найден, заблокирован или удалён. Проверять успешность нужно всегда — вызов без проверки результата означает, что скрипт продолжит выполнение так, будто вход состоялся, даже если он не удался.

    <?php
    
    global $USER;
    
    if (!$USER->Authorize($userId)) {
        // логируем и не продолжаем сценарий, рассчитанный на авторизованного пользователя
        return;
    }

    Отличие от обычного входа через форму

    Штатная форма авторизации, помимо самого входа, дополнительно проверяет пароль, применяет капчу при подозрительной активности и учитывает ограничения на количество попыток. Authorize ничего этого не делает — метод просто помечает указанного пользователя как вошедшего.

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

    Завершение сессии

    Логическая пара к Authorize — метод Logout(), завершающий текущую сессию:

    <?php
    global $USER;
    $USER->Logout();

    Частые ошибки

    • Нет проверки подписи или прав перед вызовом. Прямая уязвимость подмены пользователя через параметр в адресе.
    • Результат не проверяется. Скрипт считает, что пользователь вошёл, хотя авторизация не удалась.
    • Вызов у неинициализированного объекта. Используется именно глобальный $USER, а не создание нового экземпляра CUser — иначе изменения не относятся к текущей сессии.
    • Метод используется как замена проверке пароля. Подходит только когда личность уже подтверждена другим способом.

    Итог

    CUser::Authorize программно входит под указанным пользователем, вызываясь у глобального объекта $USER. Метод не проверяет пароль и не заменяет штатную форму входа — он предполагает, что личность пользователя уже подтверждена вашей собственной логикой, и ответственность за эту проверку лежит на разработчике, а не на самом методе.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний