Назад

Битрикс как в поле логин записывать емейл при регистрации

Главная
Блог
Битрикс как в поле логин записывать емейл при регистрации

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

Почему email лучше подходит в качестве логина?

  1. Уникальность — каждый email адрес уникален

  2. Удобство — пользователям не нужно запоминать дополнительное имя

  3. Безопасность — снижается риск подбора логинов

  4. Упрощение процесса — меньше полей для заполнения

Способ 1: Клиентская часть + серверная обработка

Шаг 1: Модификация шаблона регистрации

Найдите шаблон компонента регистрации (обычно это /bitrix/components/bitrix/system.auth.registration/templates/.default/template.php) и измените поля:

<input type="hidden" name="USER_LOGIN" id="REGISTER_LOGIN" value="">
<input type="email" name="USER_EMAIL" id="REGISTER_EMAIL" required class="bx-auth-input form-control" placeholder="Введите ваш email">

Шаг 2: Добавление JavaScript

Добавьте следующий код в шаблон или отдельный JS-файл:

document.addEventListener('DOMContentLoaded', function() {
    const emailField = document.getElementById('REGISTER_EMAIL');
    const loginField = document.getElementById('REGISTER_LOGIN');
    
    if (emailField && loginField) {
        // Копируем email в логин при вводе
        emailField.addEventListener('input', function() {
            loginField.value = this.value.trim().toLowerCase();
        });
        
        // Базовая валидация email
        emailField.addEventListener('blur', function() {
            if (!this.value.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
                alert('Пожалуйста, введите корректный email адрес');
            }
        });
    }
});

Шаг 3: Серверная обработка

Добавьте в файл /bitrix/php_interface/init.php:

AddEventHandler("main", "OnBeforeUserRegister", function(&$arFields) {
    // Если логин не указан, используем email
    if (empty($arFields["LOGIN"]) && !empty($arFields["EMAIL"])) {
        $arFields["LOGIN"] = $arFields["EMAIL"];
    }
    
    // Проверка существующего логина
    if (CUser::GetByLogin($arFields["LOGIN"])->Fetch()) {
        // Добавляем случайное число если логин занят
        $arFields["LOGIN"] = $arFields["EMAIL"].'_'.rand(100,999);
    }
});

Способ 2: Полное удаление поля логина

Если вы хотите полностью исключить поле логина из процесса:

  1. Создайте кастомный компонент на основе system.auth.registration

  2. Удалите поле логина из шаблона

  3. Добавьте обработчик:

AddEventHandler("main", "OnBeforeUserAdd", "syncLoginWithEmail");
AddEventHandler("main", "OnBeforeUserUpdate", "syncLoginWithEmail");

function syncLoginWithEmail(&$arFields) {
    if (empty($arFields["LOGIN"]) && !empty($arFields["EMAIL"])) {
        $arFields["LOGIN"] = $arFields["EMAIL"];
        
        // Проверка на уникальность
        $dbUser = CUser::GetByLogin($arFields["LOGIN"]);
        if ($dbUser->Fetch()) {
            $arFields["LOGIN"] = $arFields["EMAIL"].'_'.time();
        }
    }
}

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

  1. Валидация email:

    • На клиенте используйте type="email" и регулярные выражения

    • На сервере проверяйте через filter_var($email, FILTER_VALIDATE_EMAIL)

  2. Обработка существующих пользователей:

    // В обработчике OnBeforeUserRegister
    $user = CUser::GetByLogin($arFields["LOGIN"])->Fetch();
    if ($user && $user["EMAIL"] != $arFields["EMAIL"]) {
        $APPLICATION->ThrowException("Пользователь с таким email уже существует");
        return false;
    }

  3. Мобильная оптимизация:

    <input type="email" inputmode="email" autocomplete="email" ...>

  4. Визуальная обратная связь:

    // Добавьте в обработчик blur
    emailField.classList.add('error');
    // И стили в CSS
    .error { border-color: #ff0000; }

Тестирование решения

После реализации обязательно проверьте:

  1. Регистрацию с новым email

  2. Попытку регистрации с существующим email

  3. Ввод некорректного email адреса

  4. Работу на мобильных устройствах

  5. Отправку письма с подтверждением регистрации

Заключение

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

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

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи