Блог разработчика 1С-Битрикс

Как настроить возможность авторизации в Битрикс по телефону, email и логину

Многие разработчики, работающие с Битрикс: Управление сайтом, сталкиваются с задачей расширения стандартной системы авторизации. Часто возникает вопрос: можно ли позволить пользователям входить на сайт, используя телефон и пароль, email и пароль, а также логин и пароль — одновременно?

Три способа авторизации в Битрикс: по телефону, email и логину

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

Стандартное поведение системы

По умолчанию Битрикс использует логин и пароль для авторизации, причём в большинстве случаев логин совпадает с email. Это ограничивает гибкость, особенно если пользователи привыкли использовать телефон как идентификатор.

Чтобы добавить поддержку трёх способов входа, необходимо модифицировать логику авторизации.

Решение: как реализовать три способа авторизации

Вариант 1: Кастомная форма авторизации (рекомендуется)

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

// Пример логики в PHP
$login = $_POST['login'];
$password = $_POST['password'];

// Определяем тип ввода
if (filter_var($login, FILTER_VALIDATE_EMAIL)) {
    // Это email
    $arFilter = ['EMAIL' => $login];
} elseif (preg_match('/^[\d\+\-\(\)\s]+$/', $login)) {
    // Похоже на телефон (упрощённая валидация)
    $arFilter = ['PERSONAL_PHONE' => $login];
} else {
    // Считаем, что это логин
    $arFilter = ['LOGIN' => $login];
}

// Получаем пользователя
$users = CUser::GetList('', '', $arFilter);
if ($user = $users->Fetch()) {
    if ($USER->Login($user['LOGIN'], $password)) {
        // Успешный вход
    } else {
        // Ошибка пароля
    }
} else {
    // Пользователь не найден
}

Важно: при использовании телефона как логина убедитесь, что значение поля PERSONAL_PHONE уникально и хранится в нормализованном формате (например, +79991234567).

Вариант 2: Использование email как основного логина + телефон через кастомную логику

Оставьте стандартную авторизацию по логину/email, но добавьте возможность входа по телефону через дополнительную проверку:

  • Добавьте поле PERSONAL_PHONE в профиль пользователя.
  • При авторизации проверяйте, является ли ввод телефоном, и ищите пользователя по этому полю.
  • Для перехвата логики используйте событие OnBeforeUserLogin.

Вариант 3: Обработчик события OnBeforeUserLogin

Используйте событийную модель Битрикс, чтобы перехватить попытку входа и изменить логику аутентификации.

AddEventHandler("main", "OnBeforeUserLogin", "CustomAuthHandler");

function CustomAuthHandler($login, $password) {
    global $APPLICATION;

    // Проверяем, не является ли $login телефоном
    if (preg_match('/^[\d\+\-\(\)\s]+$/', $login)) {
        $rsUser = CUser::GetList('', '', ['PERSONAL_PHONE' => $login]);
        if ($user = $rsUser->Fetch()) {
            $_SESSION['TEMP_LOGIN'] = $user['LOGIN'];
            return ['LOGIN' => $user['LOGIN']]; // Подменяем логин
        }
    } 
    elseif (filter_var($login, FILTER_VALIDATE_EMAIL)) {
        // Email — оставляем без изменений
        return [];
    }

    return [];
}

Этот способ требует аккуратной обработки сессий и дополнительных проверок безопасности.

Рекомендации по реализации

    1. Уникальность телефонов: Убедитесь, что поле PERSONAL_PHONE содержит уникальные значения. Проверяйте это при регистрации.

    2. Нормализация телефонов: Храните номера в едином формате, например: +79991234567. Это упростит поиск и избежит дублирования.

    3. UX-подсказки: На форме входа укажите: «Введите email, телефон или логин» — это улучшит пользовательский опыт.

    4. Регистрация: При регистрации сохраняйте все три поля (логин, email, телефон), даже если логин совпадает с email.

Альтернатива: Единое поле ввода

Самый простой и удобный способ с точки зрения UX — использовать одно поле ввода, в которое пользователь может ввести email, телефон или логин. Система сама определит тип данных и найдёт подходящего пользователя.

Такой подход минимизирует путаницу и ускоряет процесс входа.

Реализацию единого поля «Логин или email или телефон» мы рассмотрим в отдельной статье - Единое поле «Логин / Email / Телефон» в 1С-Битрикс: полноценное руководство с рабочими примерами .

Вывод

Да, в Битрикс: Управление сайтом можно реализовать три способа авторизации одновременно: по телефону, email и логину. Однако это требует:

  • Модификации формы входа,
  • Или использования события OnBeforeUserLogin,
  • Или создания кастомного обработчика аутентификации.

Наиболее гибким и безопасным решением является кастомная форма с определением типа ввода. Такой подход легко масштабируется и не нарушает стандартную логику ядра Битрикс.

Теги:  авторизация, вход, телефон, email, логин, OnBeforeUserLogin, CUser, кастомная форма, PHP, Bitrix, авторизация по телефону, уникальный логин


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Техническая поддержка

выполняется с сайтами на основе любых CMS

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

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.