Многие разработчики, работающие с Битрикс: Управление сайтом, сталкиваются с задачей расширения стандартной системы авторизации. Часто возникает вопрос: можно ли позволить пользователям входить на сайт, используя телефон и пароль, 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
, - Или создания кастомного обработчика аутентификации.
Наиболее гибким и безопасным решением является кастомная форма с определением типа ввода. Такой подход легко масштабируется и не нарушает стандартную логику ядра Битрикс.