ユーザー名と一致する場合に引用が壊れる

Configuring Twitter 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"]
you right! That took all of a couple minutes and I was instantly approved. Simple fixes are always nice! :smile:
[/quote]

@tshenryさんの投稿

[quote="Taylor, post:113, topic:13395"]
You can gain access to the v1.1 API for free under the Elevated plan. You simply need to apply from your developer dashboard. I found it very quick and easy. Discourse Twitter logins worked flawlessly after that :tada:
[/quote]

(これは@taylorさんが通知を受け取ったスタイルです)

「いいね!」 4

ああ、ご指摘ありがとうございます…はい、これは望ましくない/意図したものではありません。確認します!

「いいね!」 3

つまり、@taylorさんがこの引用でタグ付けされ(メールを受け取った)理由は、彼のユーザー名「Taylor」が@tshenryさんのフルネーム「Taylor」と同じであるためです :open_mouth: (フルネームが)引用で適切に優先されているのは、DEV: Prioritize full name when setting active (#15820) · discourse/discourse@5a93ce4 · GitHub で追加された変更によるものです。

とにかく、ヒントをありがとうございます。これを修正します!

「いいね!」 9

参考までに、フルネームのない引用も空白のままになります。

「いいね!」 4

これでよろしいでしょうか、@isaac

はい、変更を元に戻しました。再度マージする前にロジックを修正中です。

「いいね!」 3

引用ロジックを更新して、サイト設定でユーザー名またはフルネームを切り替えられるようにしたところ、問題が発生しました(問題の一部は上記で指摘されています)。仮のシナリオを作成させてください…

  • Tim が投稿を作成します
  • サイト設定が追加され、OPの表示名をユーザー名 (アクティブだった) またはフルネーム (現在アクティブ) に切り替えるために有効になります
  • ユーザーが新しい投稿でTimを引用しますが、引用にはフルネームを使用しているため、他のユーザーであるTimTam、フルネーム:Timは、彼が作成していない投稿で誰かが彼を引用したという通知を受け取ります。

すべての引用を再ベイクすることも却下です。このサイト設定が複数回切り替えられ、複数回再ベイクした場合、フルネームからユーザー名に変換されている引用は一意ではなく、複数のユーザーが見つかる可能性があります。

私が見る限り、ユーザー名をフルネームに置き換えるかどうかをUXで確認するために、引用に data-full-name="true" (またはそれに類するもの) の追加のデータ属性を追加することです。これは、data-username を操作するのではなく、引用ビルダーでこれを処理します。

例:

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

これにより、ユーザー名またはフルネームをクエリしたり、通知を送信したりすることを心配する手間が省けます。どう思いますか?この変更のためにPrettyTextと引用ビルダーを更新する価値はありますか?

「いいね!」 5

スイッチオーバーのサポートは追加しない方が良いと思います。これはコミュニティ設定の初期段階で決定すべきことで、非常にスムーズなスイッチオーバーのサポートは非常に高価であり、多くのトレードオフが伴います。

ユーザー名を優先して引用すると、このマークダウンが表示されます。

[quote="isaacjanzen, post:12, topic:217633"]
Thoughts?
[/quote]

名前を優先して引用すると、このマークダウンが表示されます。

[quote="Isaac Janzen, post:12, topic:217633"]
Thoughts?
[/quote]

フルネームの「,」には注意が必要ですが、このユースケースでは削除することに賛成します。あるいは、エスケープトリックを導入することもできるでしょう。

「いいね!」 4

フルネーム付きの引用を表示する機能の追加を中止することをお勧めしますか?必然的にこれらのスイッチオーバーケースに遭遇することになります…たとえば、引用がある既存のコミュニティ

「いいね!」 1

いいえ、完全に中止するわけではありません… metaでは「UXでユーザー名を優先する」が無効になっています。私が今作成した引用は次のようになります:(アバターが欠けており、修正が必要です)

ここでのマークアップは次のようになります:

[quote="Isaac Janzen, post:14, topic:217633"]
Are you saying you would recommend we scrap trying to add the ability to display quotes with full names?
[/quote]

必要な変更は、引用ウィジェットが設定を認識して、ユーザー名の代わりにフルネームを入力するようにすることだけです。移行や履歴については心配しないでください。

「いいね!」 1

ここでの認識が一致しているか確信が持てません… DEV: Prioritize full name when setting active (#15820) · discourse/discourse@5a93ce4 · GitHub をマージした際に、以下のことを達成しました。

  # quote.js
  # opts.displayName = true if site settings prioritize full name
  const name = opts.displayName
    ? opts.name || post.name
    : opts.username || post.username;

  # build quote markdown
  const params = [
    name,
    `post:${opts.post || post.post_number}`,
    `topic:${opts.topic || post.topic_id}`,
  ];

これにより、以下の出力が得られました。

しかし、問題は、フルネームに基づくユーザー検索が、ユーザー名でエンコードされた既存の引用を壊していたことです。

そのため、以下を無視することは不可能に思われます。

「いいね!」 1

I am super confused cause meta has:

So why is the name missing from the quote above? Was the change rolled back?

Agree we need to do more here:

We need to grab the username from “post / topic” combination and place it in the cooked markdown (we should do that unconditionally), otherwise we can not display avatars for the full name.

It also lets us fix this edge case, so it does not show my avatar on this mis-quote. (or even highlights a misquote)

「いいね!」 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

セキュリティに関する膨大な問題の深淵に踏み込む必要をなくすために、Markdownの変更を受け入れることはできると思いますが、その変更は非常に限定的である必要があります。

新しい冗長な構文は、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]

これは現時点での中間ステップとして受け入れる用意がありますが、長期的な目標は、このノイズを引用ブロックから削除し(セキュリティを強化し、悪用を制限する)、インラインワンボックスで強制されているように、セキュリティの厄介な問題を解決して、以前からあった短縮された引用形式をサポートすることです。例:Quoting broken when name matches username - #20 by isaac < Quoting broken when name matches username - #20 by isaac>

これは以前の議論に関連するため、可視性のために@tobiaseigenに言及します。

要するに:

  • 現時点では、このエッジケース、そしてこのエッジケースのみに対してMarkdown形式を変更することはOKだと思います - @codinghorrorが確認してください
  • 引用ブロックが [quote="TOTALLY OPTIONAL WILL BE FISHED FROM POST IF SECURITY LINES UP AND INFO ON POST IS PRIORITIZED OVER THIS TEXT, post:3, topic:7"] となるように、セキュリティ作業のスケジュールを決定します。 - これについてはしばらく待つことをお勧めします。
「いいね!」 3

DEV: Prioritize full name when display_name_on_posts active by janzenisaac · Pull Request #16078 · discourse/discourse · GitHub をマージしてデプロイしました

確認しました。

「いいね!」 3