Недавно я перенёс сайт на Discourse. Я не знал, что у многих пользователей изменились имена пользователей, и новые имена, похоже, используют часть их адреса электронной почты. Я никогда не сталкивался с изменением имён пользователей при предыдущих миграциях. Как я могу отменить это?
Если вы уже запустили проект, внести изменения будет сложно, хотя исходное имя пользователя должно быть сохранено в пользовательском поле. Эти проблемы необходимо решать на этапе тестирования.
Если только скрипт миграции не повреждён, причина изменения имён пользователей заключается в том, что они не соответствуют формату имён пользователей в Discourse.
Какие именно имена пользователей были изменены? Откуда вы осуществляли миграцию?
Спасибо за ваш ответ, Джей. Нам пришлось перевести сайт в режим обслуживания, чтобы внести эти исправления. Было странно, что изменились колонки имени пользователя и имени. Мы ищем способ их поменять местами. Это очень запутанно…
Вы можете посмотреть UserCustomField.where(user_id: some_id), чтобы увидеть, какие пользовательские поля существуют для этого пользователя; среди них должно быть и его исходное имя пользователя.
Нам удалось поменяться. Но после обмена профили не открываются! Пишет: «Упс, страница не найдена».
Просто для перестраховки: вы обновили страницу после переназначения имён пользователей, верно? Discourse будет использовать старые имена на стороне клиента до тех пор, пока вы не перезагрузите страницу. Поэтому, если вы переназначили имена и не обновили страницу, система попытается открыть профили пользователей, которые больше не существуют.
Спасибо. Мы проверим это.
Также я не понимаю, как оно решает автоматически назначать первую половину адреса электронной почты.
Ценная платформа позволяла пользователям создавать имена профилей с использованием пробелов и специальных символов, а в URL использовался userID.
Можем ли мы использовать userID в URL и разрешить миграцию имен профилей с пробелами и специальными символами в неизменном виде?
Мы заметили, что имена пользователей и имена в симуляциях совпадали.
Мы обнаружили, что некоторые имена теперь содержат пробелы.
Если мы поменяем местами разделы имени пользователя и имени, то Discourse может назначить половину email-адреса в качестве имени пользователя для тех, кто не соответствует руководящим принципам имен профиля.
И зачем вообще Discourse использует адреса электронной почты? Это риск для безопасности.
Нет. Discourse не разрешает пробелы и (большинство) специальные символы в именах пользователей. Именно поэтому их переписали.
Я не понимаю, что вы имеете в виду насчёт URL.
Ему нужно что-то для генерации имени пользователя.
Он делает так:
UserNameSuggester.suggest(
opts[:username].presence || opts[:name].presence || opts[:email],
Таким образом, если у вас нет имени пользователя или имени, он возвращается к использованию первой части адреса электронной почты.
Значит, мы можем изменить это на что-то другое? Или убрать ID электронной почты как вариант?