Цитирование не работает, когда имя совпадает с именем пользователя

Продолжая с Configuring X login and rich embeds for Discourse - #114 by Hifihedgehog

Я получил письмо об этом и был очень сбит с толку, так как не помню, чтобы делал подобное сообщение.

Меня интересует, как здесь в цитатном ответе произошло подмена на «taylor»? Это ошибка ручного редактирования (я не уверен, как вручную создать блок цитаты с источником или вообще возможно ли это), или где-то в логике ответов есть ошибка? @tshenry

1 лайк

Я только что попробовал процитировать несколько сообщений, и, кажется, что-то не так с именем пользователя и полным именем. Вероятно, это из-за недавнего коммита:

1 лайк

Привет, @JammyDodger,

не мог бы ты предоставить мне больше информации о том, что

При включённой настройке сайта prioritize username in ux и выключенной display name on posts в цитате должно отображаться имя пользователя, и наоборот — полное имя.

1 лайк

Извините, я мог бы быть гораздо полезнее. :slightly_smiling_face: Я просто попробовал процитировать несколько сообщений в этой теме, и в редакторе появились странные результаты:

Сообщение от @Hifihedgehog:

[quote=", post:114, topic:13395"]
вы правы! Это заняло всего пару минут, и меня сразу одобрили. Простые исправления всегда приятны! :smile:
[/quote]

Сообщение от @tshenry:

[quote="Taylor, post:113, topic:13395"]
Вы можете получить бесплатный доступ к API v1.1 в рамках тарифа Elevated. Вам просто нужно подать заявку через панель разработчика. Я обнаружил, что это очень быстро и просто. После этого вход через Twitter в Discourse работал безупречно :tada:
[/quote]

(это стиль, из-за которого @taylor получил уведомление)

4 лайка

Ах, спасибо, что указали на это… да, это нежелательно / не предусмотрено. Я займусь этим!

3 лайка

Итак, причина, по которой @taylor был упомянут в этой цитате (и получил уведомление на email), заключается в том, что его имя пользователя — Taylor — совпадает с полным именем @tshenryTaylor :open_mouth:, которое (полное имя) правильно приоритизируется в цитатах благодаря изменениям, добавленным в DEV: Prioritize full name when setting active (#15820) · discourse/discourse@5a93ce4 · GitHub.

В любом случае, спасибо за подсказку, я исправлю это!

9 лайков

Кстати, это также оставляет цитаты без полных имен пустыми:

4 лайка

Мы всё уладили, @isaac?

Да, мы отменили изменение, и я работаю над исправлением логики перед повторным слиянием.

3 лайка

При обновлении логики цитирования, чтобы можно было переключать между именем пользователя и полным именем через настройку сайта, я столкнулся с проблемой (часть проблемы была отмечена выше). Давайте рассмотрим гипотетический сценарий…

  • Тим создаёт пост.
  • Добавлена и активирована настройка сайта для переключения отображаемого имени автора оригинального сообщения (ОП) между именем пользователя (было активно) и полным именем (сейчас активно).
  • Пользователь цитирует Тима в новом посте, но поскольку мы теперь используем полное имя для цитат, другой пользователь ТимТам, полное имя: Тим, получает уведомление о том, что его процитировали в посте, который он никогда не создавал.

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

Видимый нам путь решения — добавить дополнительный атрибут данных к цитате, например data-full-name="true" (или что-то подобное), чтобы проверять, нужно ли заменять имя пользователя на полное имя в интерфейсе, вместо манипуляций с data-username.

Например:

data-username="always.users.username" data-post="1" data-topic="1" data-full-name="true"

Это избавит нас от необходимости беспокоиться о том, по имени пользователя или полному имени мы выполняем запросы или отправляем уведомления. Что вы думаете? Стоит ли прилагать усилия для обновления PrettyText и нашего конструктора цитат ради этого изменения?

5 лайков

Я предпочитаю не добавлять поддержку переключения. Это решение вы принимаете на раннем этапе настройки сообщества; обеспечение максимально плавного переключения крайне дорого и сопряжено с рядом компромиссов.

Если я процитирую вас с приоритетом на имя пользователя, будет отрендерен следующий markdown:

[quote="isaacjanzen, post:12, topic:217633"]
Мнения?
[/quote]

Если я процитирую вас с приоритетом на имя, будет отрендерен следующий markdown:

[quote="Isaac Janzen, post:12, topic:217633"]
Мнения?
[/quote]

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

4 лайка

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

1 лайк

Нет, не полностью отказываться… в meta отключена настройка prioritize username in ux. Цитата, которую я только что привёл, должна выглядеть так (в ней отсутствует аватар, что нужно исправить):

Разметка здесь должна быть следующей:

[quote="Isaac Janzen, post:14, topic:217633"]
Вы имеете в виду, что рекомендуете отказаться от попытки добавить возможность отображения цитат с полными именами?
[/quote]

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

1 лайк

Я не уверен, что мы говорим об одном и том же… Когда мы объединили DEV: Prioritize full name when setting active (#15820) · discourse/discourse@5a93ce4 · GitHub, мы достигли

  # quote.js
  # opts.displayName = true, если в настройках сайта приоритет отдается полному имени
  const name = opts.displayName
    ? opts.name || post.name
    : opts.username || post.username;

  # формирование разметки цитаты
  const params = [
    name,
    `post:${opts.post || post.post_number}`,
    `topic:${opts.topic || post.topic_id}`,
  ];

чтобы получить вывод

но проблема заключалась в том, что поиск пользователя по полному имени ломал существующие цитаты, которые были сформированы с использованием имени пользователя.

Поэтому кажется, что невозможно игнорировать

1 лайк

Я в полном замешательстве, потому что в meta указано:

Так почему же имя отсутствует в цитате выше? Изменения были откатаны?

Согласен, нам нужно поработать над этим:

Нам нужно извлечь имя пользователя из комбинации «пост / тема» и поместить его в обработанный Markdown (мы должны делать это без условий), иначе мы не сможем отображать аватары для полного имени.

Это также позволит нам исправить этот частный случай, чтобы мой аватар не отображался в этой ошибочной цитате (или даже подсвечивал ошибку цитирования).

1 лайк

Ага, да

Я согласен и могу добавить это.

2 лайка

Я полностью открыт к исправлению нескольких крайних случаев, пока мы этим занимаемся:

  1. Несоответствие имени пользователя
    • Что делать с аватаром?
    • Что делать с именем пользователя?
  2. Несоответствие полного имени
    • Что делать с аватаром?
    • Что делать с именем?

Думаю, лучшее решение на данный момент — просто «переопределить». Если в сообщении есть имя/имя пользователя, используйте их вместо тех, что были указаны в цитате. Учитывайте текущее имя и текущее имя пользователя.

3 лайка

Хорошо, я подготовил PR, который проясняет ситуацию.

Основные выводы

Теперь мы передаём имя пользователя, когда

siteSettings.display_name_on_posts && !siteSettings.prioritize_username_in_ux && post.name

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

Например:

[quote="Isaac Janzen, post:3, topic:7, full:true, username:isaac.janzen"]
bing bong
[/quote]

Что вы думаете, @sam?

3 лайка

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

Можете ли вы подтвердить, что новый подробный синтаксис всегда срабатывает только если выполнены оба условия: siteSettings.display_name_on_posts && !siteSettings.prioritize_username_in_ux?

[quote="Isaac Janzen, post:3, topic:7, username:isaac.janzen"]
....
[/quote]

То есть, если вы не включите одновременно display_name_on_posts И не отключите prioritize_username_in_ux,

то старый формат цитаты должен остаться прежним:

[quote="isaac.janzen, post:3, topic:7"]
....
[/quote]

Я готов принять это как промежуточный шаг на данный момент, но нашей долгосрочной целью является удаление этого шума из блока цитаты (усиление безопасности, ограничение злоупотреблений) и поддержка сокращённого формата цитаты, который у нас всегда был, проработав «консервный завод с змеями» по вопросам безопасности, точно так же, как мы вынуждены делать сейчас для встроенных oneboxes, например: Quoting broken when name matches username - #20 by isaacQuoting broken when name matches username - #20 by isaac

Упоминаю @tobiaseigen здесь для видимости, так как это связано с предыдущими обсуждениями.

Итог:

  • По моему мнению, допустимо изменить формат разметки на данный момент только для этого частного случая — и только для этого частного случая — @codinghorror подтвердите.
  • Не определено: запланировать работу по безопасности, чтобы блок цитаты стал [quote="ВООБЩЕ ОПЦИОНАЛЬНО, БУДЕТ ИЗВЛЕЧЁН ИЗ ПОСТА, ЕСЛИ БЕЗОПАСНОСТЬ ПОДТВЕРДИТСЯ И ИНФОРМАЦИЯ ИЗ ПОСТА БУДЕТ ПРИОРИТЕТНЕЕ ЭТОГО ТЕКСТА, post:3, topic:7"]. — рекомендую пока подождать с этим.
3 лайка

Объединено и развернуто: DEV: Prioritize full name when display_name_on_posts active by janzenisaac · Pull Request #16078 · discourse/discourse · GitHub

Могу подтвердить.

3 лайка