Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Но есть одна загвоздка: пароли пользователей, в большинстве случаев, хранятся в зашифрованном виде и сохранить эти пароли в базе Битрикса сразу нельзя. Чтобы решить эту задачу, потребуется прибегнуть к небольшой хитрости.
Весь процесс можно разделить на 3 шага.
1. Для начала, конечно же, необходимо экспортировать пользователей из старой системы в CSV-файл. Я не буду заострять внимание на этом шаге, способы есть разные, упомяну только лишь о возможности экспортировать данные определённой таблицы в CSV-файл с использованием phpMyAdmin.
В результате в CSV-файле у вас должно получиться примерно такое содержимое:
2. Как уже упоминалось выше, поле "PASSWORD", скорее всего, будет содержать зашифрованное значение. Чтобы пользователь не заметил смены движка и дальше продолжал пользоваться функционалом сайта, но при этом мы могли бы записать корректное значение пароля в базу Битрикса, пользователю потребуется заново авторизоваться. Вот тут-то мы и определим пароль, сравнив зашифрованное значение, загруженное из CSV-файла, со значением, отправленным пользователем при авторизации, используя алгоритм из старой системы, который Вам потребуется скопировать.
Перед импортом необходимо в файле "/bitrix/php_interface/init.php" вставить обработчик события :
В этом обработчике при импорте, после добавления пользователя, будет происходить добавление логина и зашифрованного пароля в отдельную таблицу, назовём её "old_user". Создать таблицу можно в "Настройки - Инструменты - SQL-запрос", выполнив запрос:
Затем запустите CSV-импорт и убедитесь, что таблица "old_user" заполнилась.
3. На следующем и последнем шаге удалите из файла "/bitrix/php_interface/init.php" вставленный код и вставьте новый:
Этот код будет решать основную задачу, которую я описал выше: сопоставлять отправленный пользователем пароль с имеющимися в таблице "old_user" и записывать его, в случае совпадения, в таблицу Битрикса.
Периодически Вы можете просматривать содержимое таблицы "old_user". Когда таблица "old_user" опустеет, Вы можете удалить её, как и код, указанный на 3 шаге.
Стоит также учесть, что пользователь может захотеть изменить пароль. Это можно запретить для пользователей, находящихся в таблице "old_user", создав обработчик события .
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Перенос пользователей из другой системы
В целом, задача импорта пользователей из другой системы не такая уж и сложная: достаточно создать CSV-файл со списком пользователей, в котором будут заполнены как минимум поля "NAME" и "LAST_NAME"().Но есть одна загвоздка: пароли пользователей, в большинстве случаев, хранятся в зашифрованном виде и сохранить эти пароли в базе Битрикса сразу нельзя. Чтобы решить эту задачу, потребуется прибегнуть к небольшой хитрости.
Весь процесс можно разделить на 3 шага.
1. Для начала, конечно же, необходимо экспортировать пользователей из старой системы в CSV-файл. Я не буду заострять внимание на этом шаге, способы есть разные, упомяну только лишь о возможности экспортировать данные определённой таблицы в CSV-файл с использованием phpMyAdmin.
В результате в CSV-файле у вас должно получиться примерно такое содержимое:
| NAME | LAST_NAME | LOGIN | PASSWORD |
| Иван | Иванов | ivan | $P$BMcujdtDPda5n0WhJWl81tPGAlyrCw. |
| Пётр | Петров | test | $P$BP9Z.C4z2YkgJ6JibnhA2UKPPwlqZo. |
| Антон | Шпак | user | $P$BsAjJCwkgTm3jmgwUYxlhgCenydAB./ |
2. Как уже упоминалось выше, поле "PASSWORD", скорее всего, будет содержать зашифрованное значение. Чтобы пользователь не заметил смены движка и дальше продолжал пользоваться функционалом сайта, но при этом мы могли бы записать корректное значение пароля в базу Битрикса, пользователю потребуется заново авторизоваться. Вот тут-то мы и определим пароль, сравнив зашифрованное значение, загруженное из CSV-файла, со значением, отправленным пользователем при авторизации, используя алгоритм из старой системы, который Вам потребуется скопировать.
Перед импортом необходимо в файле "/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"])."'"
));
}
} |
CRE ATE TABLE `old_user` ( `LOGIN` varchar(60) NOT NULL, `HASH` varchar(64) NOT NULL, PRIMARY KEY (`LOGIN`) ); |
3. На следующем и последнем шаге удалите из файла "/bitrix/php_interface/init.php" вставленный код и вставьте новый:
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" опустеет, Вы можете удалить её, как и код, указанный на 3 шаге.
Стоит также учесть, что пользователь может захотеть изменить пароль. Это можно запретить для пользователей, находящихся в таблице "old_user", создав обработчик события .
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх