自分を招待して招待バッジを獲得

説明と証拠

最近、2.9.0beta2 では、すでにアカウントを持っているユーザーが招待リンクをクリックできるようになりました。しかし、私が生成した招待リンクをクリックしたところ、自分が招待したと表示され、TL2以上であったため、私の招待リンクを5回クリックした結果、Championバッジを受け取りました。そのスクリーンショットを以下に示します。これらはReplit EDUフォーラムにあり、私のプロフィールはこちらで表示できます。

Codecademyフォーラムでも招待リンクを作成しましたが、そこでも自分が招待したと表示されます。これは以下で確認できます。私のプロフィールはこちらで表示できます。

再現手順

デフォルトでTL2以上に到達し、招待リンクを作成してクリックします。上記のように、プロフィールに自分が招待したと表示され、招待を受け入れたと表示されます。十分な招待リンクをクリックすると、CampaignerおよびChampionバッジを受け取ります。

「いいね!」 4

ここでもうまくいきました。これで、私のプロフィールには自分で招待されたと表示されています。

「いいね!」 6

そして、あなたはプロモーターバッジを受け取るはずです。(以前から持っていたので、元の投稿で言及するのを忘れました)

「いいね!」 2

ご指摘ありがとうございます!この機能の設計時、悪役の視点を持つことを忘れていました。:supervillain:

@dan この問題の解決策について何か考えはありますか?

「いいね!」 6

私は個人的にDiscourseのコードを見たことはありませんが、このようなものが機能するかもしれません。(これは私が一番よく知っているJSで書かれています)

if (invter != invitee) {
  inviter_count++
}
「いいね!」 3

このバグは修正されました。ご報告いただいた @not-ethan さん、ありがとうございました!招待システムで何か問題にお気づきの際は、ぜひお知らせください。現在、積極的に対応中です。

「いいね!」 5

@not-ethan からの PM を見失っていたため、再オープンします。@dan、お手数でなければお手伝いいただけますか?

修正のコミットまたは PR へのリンクを教えていただけますか?修正内容が気になります。

「いいね!」 5

@tobiaseigen @dan PRを見つけたと思います FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

「いいね!」 4

@not-ethan のリクエストにより再オープンされました。何らかの回帰がありましたか?

「いいね!」 1

追加のテストを行ったところ、この問題はReplit Askでのみ発生しています。


しかし、metaや他のフォーラムでは発生せず、表示されるのは「Ethanがあなたの招待を受け入れました」というメッセージのみで、バッジは付与されません。

「いいね!」 1

もういいです。Metaと他のフォーラムでバッジを取得しました。12時間かかりました。

「いいね!」 3

確認しました。

「いいね!」 1

皆さん、こんにちは。

招待コードを作成して自分で利用できてしまうバグがあり、それによって招待バッジを獲得できてしまうという、厄介な問題が発生しています。この問題は@not-ethanさんによって指摘され、プルリクエストも作成されましたが、バグはまだ修正されていません。私のアイデアは、誰かがウェブで招待コードを使用しようとした際に、その人が既にログインしている場合はコードを無効にするというものです。

「いいね!」 2

Urias、再度ご指摘いただきありがとうございます。招待システムは現在非常に複雑であり、変更を加えると予期せぬ意図しない結果を招く可能性があるため、現時点ではあまり触れたくないと考えています。

バッジの付与方法を変更することで、この問題を回避する方法はありますか?例えば、招待を償還する人がすでにメンバーである場合、招待を作成した人にキャンペーン担当者バッジを付与しない、といった方法です。

これは、おそらく長い間存在していたものの、見過ごされていた問題のように思われます。別の解決策としては、これを「何もしない、仕様通り」として扱い、コミュニティモデレーターがこの方法を悪用してバッジを増やそうとする人がいる場合に、彼らに対応を任せるという方法も考えられます。

「いいね!」 4

私のSQLは確認が必要かもしれませんが、招待者自身を招待した場合に付与されないように、バッジクエリにこの行を追加できると思います - AND i.invited_by_id <> u2.id

例えば、以下のようになります。

SELECT u.id user_id, current_timestamp granted_at 
FROM users u 
WHERE u.id IN (
  SELECT invited_by_id 
  FROM invites i 
  JOIN invited_users iu ON iu.invite_id = i.id 
  JOIN users u2 ON u2.id = iu.user_id 
  WHERE i.deleted_at IS NULL
  AND i.invited_by_id <> u2.id
  AND u2.active 
  AND u2.trust_level >= 0 
  AND u2.silenced_till IS NULL 
  GROUP BY invited_by_id 
  HAVING COUNT(*) >= 1 
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
(:backfill OR u.id IN (:user_ids) ) 

「いいね!」 4

クール!しばらくバッジシステムで遊んでいませんでしたが、今見ると管理者のバッジUIに招待関連のバッジが見当たりません。これらはコアディスコースで編集する必要があるシステムバッジなのでしょうか?

「いいね!」 2