• МАКС: М.Базаров
  • Телеграм: М.Базаров
  • E-mail: mihail@bazarow.ru

1С-Битрикс сделать email в качестве логина при создании пользователя при регистрации

Вопрос задан: 3 июня 2026 в 11:00 | Просмотров: 19 Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetFunctionCode, liveApiFindByReflection, liveApiGetAllEvents, liveApiGetModuleEvents, liveApiGetFunctionUsage

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

В 1С-Битрикс нет встроенной готовой опции "Email как логин" в настройках. Поля LOGIN и EMAIL — это разные поля в таблице пользователей. Однако эту задачу можно решить программно.

Способ 1. Через событие OnBeforeUserRegister (рекомендуемый)

При регистрации через стандартный компонент bitrix:main.register срабатывает событие OnBeforeUserRegister. В обработчике можно подменить значение логина на email.

Создайте файл init.php/bitrix/php_interface/ или /local/php_interface/) и добавьте:

<?php
// Регистрируем обработчик события OnBeforeUserRegister
AddEventHandler('main', 'OnBeforeUserRegister', 'setEmailAsLoginHandler');
function setEmailAsLoginHandler(&$arFields)
{
    // Если логин не заполнен, подставляем email в качестве логина
    if (empty($arFields['LOGIN']) && !empty($arFields['EMAIL']))
    {
        $arFields['LOGIN'] = $arFields['EMAIL'];
    }
    // Если логин отличается от email — принудительно заменяем
    elseif (!empty($arFields['EMAIL']))
    {
        $arFields['LOGIN'] = $arFields['EMAIL'];
    }
}
?>

Событие OnBeforeUserRegister (модуль main, файл /bitrix/modules/main/install/components/bitrix/main.register/component.php) вызывается перед созданием пользователя через компонент регистрации. $arFields содержит поля, которые будут переданы в CUser::Add().

Способ 2. Через событие OnBeforeUserAdd (универсальный)

Если пользователь создаётся не только через компонент регистрации, но и программно через CUser::Add() — подойдёт событие OnBeforeUserAdd (модуль main, файл /bitrix/modules/main/classes/general/user.php):

<?php
AddEventHandler('main', 'OnBeforeUserAdd', 'setEmailAsLoginOnAdd');
function setEmailAsLoginOnAdd(&$arFields)
{
    if (empty($arFields['LOGIN']) && !empty($arFields['EMAIL']))
    {
        $arFields['LOGIN'] = $arFields['EMAIL'];
    }
}
?>

Способ 3. Авторизация по email

Стандартный метод CUser::Login($login, $password) (модуль main, класс CUser, файл /bitrix/modules/main/classes/general/user.php, строка 1736) ищет пользователя по полю LOGIN. Если вы подставили email в LOGIN — авторизация будет работать автоматически.

Если нужно, чтобы пользователь мог вводить email в поле логина при авторизации (без изменения самого логина), используйте событие OnBeforeUserLogin:

<?php
AddEventHandler('main', 'OnBeforeUserLogin', 'authByEmailHandler');
function authByEmailHandler(&$arFields)
{
    // Проверяем, не является ли введённый логин email'ом
    if (check_email($arFields['LOGIN']))
    {
        // Ищем пользователя по email
        $rsUser = CUser::GetList(
            $by = 'ID', $order = 'ASC',
            ['=EMAIL' => $arFields['LOGIN']]
        );
        if ($arUser = $rsUser->Fetch())
        {
            // Подставляем реальный логин для авторизации
            $arFields['LOGIN'] = $arUser['LOGIN'];
        }
    }
}
?>

Что важно учесть

  • Уникальность: Поле LOGIN должно быть уникальным в таблице b_user. Если у двух пользователей email совпадёт — возникнет ошибка. Предусмотрите проверку.
  • Длина логина: Стандартное ограничение поля LOGIN — 50 символов (в БД varchar(50)). Если email длиннее, нужно расширять поле либо обрезать.
  • Символы: Логин по умолчанию может содержать только латиницу, цифры, дефис и подчёркивание. Email содержит @ и . — это допускается в современных версиях Битрикс, но уточните в своей.
  • Главный модуль: В настройках Настройки > Настройки продукта > Настройки модулей > Главный модуль на вкладке Авторизация можно установить флаг "Email является обязательным полем" — это не делает email логином, но гарантирует, что email будет заполнен.