Реализация единого поля «Логин / Email / Телефон» в авторизации 1С-Битрикс

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

Единое поле авторизации — это удобный UX-паттерн: пользователь вводит одну строку (логин, email или телефон), а система сама определяет тип и авторизует. Ниже — цельное, «боевое» решение для Битрикс: Управление сайтом / Битрикс24 коробка с акцентом на правильные фильтры, безопасность и обслуживание.
Изменено: Валерий Макеев - 28.09.2025 14:32:50
Пример обработчика события для автоматического определения логина по email или телефону, который можно добавить в bitrix/php_interface/init.php:

Код
<?php

use Bitrix\Main\EventManager;
use Bitrix\Main\UserTable;
use Bitrix\Main\Context;

EventManager::getInstance()->addEventHandler('main', 'OnBeforeUserLogin', function (&$arFields) {
    $input = trim($arFields['LOGIN'] ?? '');
    if (empty($input) || strlen($input) > 255) return;

    // Проверяем, не является ли ввод уже валидным логином
    $userByLogin = UserTable::query()
        ->setSelect(['ID', 'LOGIN'])
        ->where('LOGIN', $input)
        ->where('ACTIVE', 'Y')
        ->fetch();

    if ($userByLogin) return;

    // Поиск по email
    if (filter_var($input, FILTER_VALIDATE_EMAIL)) {
        $user = UserTable::query()
            ->setSelect(['LOGIN'])
            ->where('EMAIL', $input)
            ->where('ACTIVE', 'Y')
            ->fetch();

        if ($user) {
            $arFields['LOGIN'] = $user['LOGIN'];
            return;
        }
    }

    // Нормализация и поиск по телефону
    $phone = normalizePhone($input);
    if ($phone) {
        $searchFields = ['PERSONAL_MOBILE', 'PERSONAL_PHONE'];
        
        foreach ($searchFields as $field) {
            $user = UserTable::query()
                ->setSelect(['LOGIN'])
                ->where($field, $phone)
                ->where('ACTIVE', 'Y')
                ->fetch();

            if ($user) {
                $arFields['LOGIN'] = $user['LOGIN'];
                return;
            }
        }
    }
});

// Функция нормализации телефона
function normalizePhone($rawPhone) {
    $digits = preg_replace('/\D/', '', $rawPhone);
    
    if (strlen($digits) === 10) {
        return '+7' . $digits;
    } elseif (strlen($digits) === 11 && $digits[0] === '8') {
        return '+7' . substr($digits, 1);
    } elseif (strlen($digits) === 11 && $digits[0] === '7') {
        return '+' . $digits;
    }
    
    return null;
}

Он автоматически определяет логин пользователя по введенному email или телефону при авторизации через стандартные формы Битрикс.
Изменено: Валерий Макеев - 28.09.2025 14:20:21
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

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

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.