Повреждение данных пользователей при миграции с phpBB3 на WP/Discourse

Иногда, и, казалось бы, сразу после свежего импорта данных пользователей с нашего старого сайта на базе phpBB3, мы сталкиваемся с проблемой: при синхронизации между WP и Discourse данные некоторых пользователей повреждаются, подменяясь данными других пользователей. Это происходит нечасто и не воспроизводится по требованию, что, к сожалению, привело к тому, что наша команда разработчиков в основном списала это как несущественную проблему.

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

Во втором случае я зарегистрировал тестового пользователя в WP, и при синхронизации с Discourse этот тестовый пользователь занял имя существующего пользователя в Discourse, а также получил часть его пользовательских данных профиля и групп. См. скриншот.

В обоих случаях в повреждении учетной записи тестового пользователя участвовали дублирующиеся пользователи в Discourse. Например: agmolnar и agmolnar1, а также tbm960c и tbm960c1.

У нас было множество таких дублирующихся пользователей, которые, судя по всему, возникли из анонимных пользователей в импортированном файле данных phpBB3.

Столкнулся ли кто-нибудь ранее с чем-то подобным или есть какие-либо подсказки, в чем может быть проблема? Стоит ли нашей команде очистить файл импорта phpBB3 от анонимных пользователей перед новым импортом?

Заранее спасибо за любые предложения.

Привет, Райан,

Возможно, стоит посмотреть на эти файлы и проверить, нет ли там полезной информации:

Также:

И:

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

Спасибо, Coin-coin. Если мы очистим анонимных пользователей из файла данных пользователей перед импортом, я предполагаю, что все анонимные сообщения будут назначены пользователю «system», как это происходит и сейчас. Есть ли какие-либо причины, о которых я мог не знать, чтобы оставить анонимных пользователей из нашего экземпляра phpBB в файле импорта?

Исходя из этого и других тем, таких как…

Кажется, что наша проблема связана с анонимными пользователями, которые по сути являются дубликатами пользователей, не существующих в WP. Свежий импорт в WP меняет структуру идентификаторов пользователей WP, но не идентификаторов Discourse, устраняя недавно созданных тестовых пользователей WP. Кроме того, Discourse сначала пытается сопоставить пользователей по внешнему идентификатору WP.

При выполнении свежего импорта из базы данных удаляются некоторые тестовые пользователи WP. Идентификаторы пользователей нескольких анонимных пользователей phpBB, которые я искал, похоже, имеют самые высокие целочисленные идентификаторы пользователей в Discourse (4505, 4506 и т. д.). Таким образом, похоже, что при выполнении свежего импорта и удалении тестовых аккаунтов в WP новый пользователь в WP затем синхронизируется по старому идентификатору теперь несуществующего старого тестового пользователя.

Заставляя пользователей сопоставляться по электронной почте вместо внешнего идентификатора во время свежего импорта, как описано в посте #5 по ссылке выше, мы должны исключить возможность нежелательного слияния старых и новых пользователей.

Разве это не звучит разумно?

Спасибо

Проблема в том, что при этом будет утеряна атрибуция сообщений уникальным пользователям, поэтому будет сложно отслеживать разговор, где все сообщения, похоже, исходят от одного пользователя system — вы не сможете различить отдельных участников.

Точно; концептуально вы можете либо оставить всё как есть и вручную использовать интерфейс профиля администратора для слияния пользователей, которые должны быть одним и тем же лицом, ЛИБО, как вы предлагаете, просто отправлять электронную почту как внешний идентификатор, что позволит новым входам в систему подключаться к существующей учётной записи с совпадающим адресом электронной почты.

Второй вариант явно является путём наименьшего сопротивления :+1:

@kiefferr Я заметил некоторые детали на изображениях, которые вы прикрепили, и удалил их, на случай если вы не планировали их публиковать. Пожалуйста, не стесняйтесь загрузить изображения снова, если это необходимо. :slight_smile: :+1:

Вы имеете в виду, что одновременно ведёте сообщества на Discourse и phpBB3 и периодически импортируете данные из phpBB3?

На данный момент так и кажется, учитывая, как затягивается разработка нового сайта на базе WP/Discourse, но нет, Discourse всё ещё находится в разработке. Мы заменяем кастомный сайт, который был создан на основе phpBB3.

Мы выполнили первоначальный импорт, а затем решили провести ещё один тестовый импорт перед финальным импортом перед переключением. Я рад, что мы это сделали, потому что не хотел бы отлавливать такие ошибки на работающем сайте.

Привет, ребята, у меня есть уточняющий вопрос, если вы не против. Я обсудил с командой разработчиков вышеизложенные выводы относительно принудительного сопоставления пользователей по электронной почте вместо внешних идентификаторов во время финального импорта/миграции непосредственно перед запуском, а также удаления записей SSO для их чистой повторной синхронизации.

Однако теперь они, похоже, считают, что в исходных данных экспорта phpBB3 были какие-то проблемы, а именно: дублирующиеся/анонимные пользователи в этих данных, а также некоторые пользователи phpBB без привязанных адресов электронной почты. Всё это, как мне кажется, должно быть обработано Discourse при импорте данных из phpBB3. Не так ли? Особенно в части того, как Discourse присваивает вымышленные имена пользователей анонимным аккаунтам — это стандартная процедура.

Если нам действительно нужно получить более чистые данные из текущей установки phpBB3, мы, вероятно, сможем это сделать. Но, похоже, нам не следует и не нужно вмешиваться в данные phpBB. В этом и не было основной проблемы.

Мы выполнили новую установку Discourse и успешно импортировали данные из phpBB.

Вот наши выводы:
Таблица “…_users” содержит в общей сложности 3270 записей.
При скачивании импортированных пользователей из Discourse мы обнаружили, что в Discourse насчитывается 3251 пользователь.
В ходе анализа мы выяснили, что у нескольких пользователей в именах в Discourse добавлена цифра “1”, которая фактически была частью их имён в данных phpBB. Только один конкретный пользователь — “redacted_username1” — отсутствует в данных phpBB. Однако пользователь “redacted_username” в данных phpBB присутствует.

Электронная почта, связанная с именем пользователя Discourse “edacted_username1”, — “anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid”. Это указывает на то, что имя пользователя “redacted_username” уже было занято анонимным пользователем, который затем добавил к своему имени “1”.

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

Расхождение в количестве пользователей между phpBB и Discourse составляет 19. В данных phpBB есть 53 пользователя, у которых отсутствует привязанный адрес электронной почты.

При поиске пользователей с пометкой “anonymous” в Discourse возвращается 32 пользователя с анонимными адресами электронной почты, которые в настоящее время приостановлены. Имена пользователей, присвоенные этим анонимным аккаунтам, не встречаются в данных phpBB. Это означает, что Discourse присваивает вымышленные имена анонимным пользователям, что может потенциально привести к ошибкам в будущем.

В итоге: 19 пользователей без адресов электронной почты не были импортированы, а 32 пользователя были синхронизированы как анонимные с вымышленными именами.

Пожалуйста, предоставьте чистые данные PHPBB, чтобы мы могли выполнить импорт.

Кроме того, если у вас есть какие-либо соображения по этому поводу, пожалуйста, дайте нам знать.

Если вы не собираетесь удалять этих пользователей из базы данных, я бы изменил скрипт так, чтобы он их игнорировал. Получение частичной дампа, скорее всего, будет трудно воспроизвести.

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