Обсудим ваш проект?

Перенос пользователей в «1С-Битрикс»


Просмотров:
1062
Время на прочтение:
Статья обновлена:
20 Марта 2020
Информация о статье
Просмотров: 1062
Время на прочтение:
Статья обновлена: 20.03.2020
Дарья Иванова, редактор
Станислав Мозгель, руководитель отдела разработки
Дарья Иванова, редактор
Станислав Мозгель, руководитель отдела разработки

Перенос пользователей в CMS «1C-Битрикс» из другой системы выполняется довольно быстро и без сложностей. Для этого нужно создать CSV-файл с перечнем пользователей с заполненными полями NAME и LAST_NAME, LOGIN и PASSWORD. Однако имейте в виду: здесь может возникнуть проблема с паролями. Пользовательские данные в большинстве ситуаций находятся в зашифрованном виде и сохранить их в базу Bitrix сразу не получится. Для решения этой задачи нужно учесть несколько важных нюансов.

Этап 1. Экспортируем пользователей в CSV-файл

Первым делом мы экспортируем пользователей из старой системы в CSV-файл. Экспорт не представляет технических сложностей. Нужно лишь перейти в перечень зарегистрированных пользователей в административном разделе. Для этого пройдите по вкладкам «Настройки» => «Пользователи» => «Список».

Далее кликните по значку шестеренки в верхней правой части. В открывшемся меню выбирайте Excel. После этого вам предложат сохранить пользовательский список в формате CSV. Если же вы хотите выгрузить дополнительные поля, то просто включите их в список. В получившемся файле у вас будет примерно такой перечень:

Пример выгрузки пользователей
Пример выгрузки пользователей

В четырех ячейках представлены имена, фамилии, логин и пароль.

Этап 2. Вставляем обработчик события

В поле Password (пароль) будет зашифрованное значение. Чтобы пользователь не заметил переезд на другой движок и без проблем продолжил пользоваться функционалом сайта, ему придется авторизоваться заново. Нам потребуется включить оптимальное значение пароля в базу «1C-Битрикс». Здесь и нужно определить пароль путем сравнения зашифрованного значения из CSV-файла со значением, которое пользователь отправил при авторизации. Для этого скопируйте алгоритм из старой системы.

Перед тем, как выполнить импорт, требуется вставить обработчик события OnAfterUserAdd в файл /bitrix/php_interface/init.php. Для этого используем следующий кусок кода:

AddEventHandler("main", "OnAfterUserAdd", "__afterUserAdd");
function __afterUserAdd($arParams)
{
    if(defined("USER_IMPORT_EXECUTION_TIME"))
    {
        global $DB;
        
        $DB->Ins ert("old_user", array(
            "LOGIN" => "'".$DB->ForSQL($arParams["LOGIN"])."'",
            "HASH" => "'".$DB->ForSQL($arParams["PASSWORD"])."'"
        ));
    }
}

В процессе импорта этот обработчик после включения в него пользователя будет добавлять логин и зашифрованный пароль в отдельную таблицу. Пускай она называется old_user. Сделать ее можно, используя SQL-запрос. Для этого заходим в «Настройки» => «Инструменты» => «SQL-запрос».

Выполняем следующий запрос:

CRE ATE TABLE `old_user` (
  `LOGIN` varchar(60) NOT NULL,
  `HASH` varchar(64) NOT NULL,
  PRIMARY KEY (`LOGIN`)
);

Далее запускаем CSV-импорт и проверяем, что таблица old_user заполнена целиком.

Этап 3. Вставляем новый код

Последний шаг — удалить вставленный код /bitrix/php_interface/init.php из файла и добавить новый. К примеру, переносим пользователей с WordPress на «1C-Битрикс»:

AddEventHandler("main", "OnBeforeUserLogin", "__beforeUserLogin");
function __beforeUserLogin($arParams)
{
    global $DB;
 
    $login = $DB->ForSQL($arParams["LOGIN"]);
    $password = $arParams["PASSWORD"];
    $from_old = "FROM old_user wh ere LOGIN='$login';";
    
    // Ищем пользователя с таким логином в "old_user"
    $rsOLDUser = $DB->Query("SELECT * $from_old");
    if(!($arOLDUser = $rsOLDUser->GetNext()))
        return true;
    
    // Ищем пользователя с таким логином в базе Битрикса
    $rsBXUser = CUser::GetByLogin($login);
    if(!($arBXUser = $rsBXUser->GetNext()))
        return true;
    
    // Проверяем правильность присланного пароля
    // алгоритмом старой системы
    // (в данном случае это worpress 3.3.1)
    require_once('wp-class-phpass.php');
    $wp_hasher = new PasswordHash(8, TRUE);
    if(!$wp_hasher->CheckPassword($password, $arOLDUser['HASH']))
        return true;
    
    // Обновляем пароль пользователя в базе Битрикса
    $USER = new CUser;
    $bUbdate = $USER->Update($arBXUser["ID"], array("PASSWORD" => $password));
    unset($USER);
    if(!$bUbdate)
        return true;
    
    // А затем удаляем пользователя из "old_user"
    $DB->Query("DELETE $from_old");
    return true;
}

Этот код решает самую важную задачу: он сравнивает отправленный пользователем пароль с паролем old_user из таблицы. В случае совпадения код фиксирует отправленный пароль в таблице.

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

Учитывайте, что пользователи периодически меняют пароли. Запретите это действие для тех, чьи пароли находятся в таблице old_user. Для этого создайте обработчик события OnSendUserInfo.

Использование модуля

Второй способ переноса пользователей с сайта, на котором стоит редакция «1С-Битрикс», — использование специального модуля «Перенос пользователей». С его помощью вы транспортируете все пользовательские данные, выводимые на странице редактирования по следующей ветке: «Пользователи»«Список пользователей».

Не будут, однако, перенесены файловые поля. Это фотографии («Личные данные») и Логотип компании (вкладка «Работа). При этом модуль переносит значения (в том числе и множественные) из вкладки «Дополнительные поля». Перед началом переноса обязательно нужно выполнить бэкапы.

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


Поможем с сайтами на Битрикс!
Разрабатываем, развиваем и обеспечиваем бесперебойность работы сайтов на Bitrix. Работаем с сайтами любой технической сложности и бизнес-логики. В течение 2 часов реагируем на любые ваши задачи в тикетной системе. В команде 6 программистов и 3 технических менеджера.