描述和证据
最近在 2.9.0beta2 中,已有账户的用户可以点击邀请链接。但我生成的邀请链接,点击后显示我邀请了自己,并且因为我是 TL2+ 用户,点击了 5 个不同的邀请链接后,我获得了 Champion 徽章 。您可以在下方看到它的截图。这些是在 Replit EDU 论坛 上,您可以通过此处 查看我的个人资料。
我还曾在 Codecademy 论坛 上创建了一个邀请链接,点击后显示我邀请了自己,您可以在下方看到。通过此处 可以查看我的个人资料。
重现步骤
达到 TL2+(默认情况下),创建邀请链接然后点击它们。它会在您的个人资料中显示您邀请了自己,并且您接受了自己的邀请,如下图所示。如果您创建了足够的邀请链接,您将获得 Campaigner 和 Champion 徽章。
4 个赞
Moin
2022 年2 月 14 日 17:15
2
对我来说也一样。现在我的个人资料显示是我自己邀请的。
6 个赞
而且你应该会收到推广者徽章。(因为在此之前我已经拥有了,所以在原始帖子中忘记提到了)
2 个赞
感谢您指出这一点!在设计此功能时,我忘记了像个坏人一样思考。
@dan 对如何解决此问题有什么想法吗?
6 个赞
我个人从没看过 discourse 的代码,但类似这样的东西可能会起作用。(这是用 JS 写的,因为我最熟悉它)
if (invter != invitee) {
inviter_count++
}
3 个赞
此 bug 现已修复。再次感谢 @not-ethan 报告此问题!如果您发现邀请系统有任何问题,请告知我们。我们正在积极处理。
5 个赞
由于我错过了 @not-ethan 发送的私信,因此重新打开此问题。@dan 如果不麻烦的话,您能帮忙吗?
我可以获取修复的 commit 或 PR 的链接吗?我只是好奇修复是什么。
5 个赞
应 @not-ethan 的要求重新打开。是否出现了某种回归?
1 个赞
经过一些额外的测试,我只在 Replit Ask 上遇到此问题:
但在 meta 或其他论坛上没有遇到此问题,所有显示的内容都是“Ethan 接受了你的邀请”,但没有授予徽章。
1 个赞
没关系,我刚在 Meta 和另一个论坛上获得了徽章。花了大约 12 个小时。
3 个赞
urias
(Hugoonreplit)
2022 年12 月 4 日 12:01
18
嘿各位,
有一个 bug,可以让你创建邀请码并自己兑换,这样你就可以获得邀请徽章,这很烦人。@not-ethan 提到了这一点,并且提交了一个拉取请求,但该 bug 仍然存在。我的想法是,如果有人在登录状态下使用邀请码访问网页,那么让该邀请码失效!
2 个赞
感谢您再次提出这个问题,Urias。我们目前正试图尽量不触碰邀请系统,因为它很复杂,进行更改可能会产生意想不到的后果。
Ethan:
我们能否通过更改徽章的授予方式来绕过这个问题?例如,如果兑换邀请的人已经是会员,则不将活动家徽章授予创建邀请的人?
在我看来,这个问题可能长期存在但未被注意到。另一种方法是将其视为“不做任何事,按设计工作”,并由社区版主处理,如果他们担心有人滥用此方法来获得更多徽章。
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 个赞
太棒了!我有一段时间没玩过徽章系统了,但现在看的时候,在管理员的徽章界面中看不到与邀请相关的徽章。也许这些是必须在核心 Discourse 中编辑的系统徽章?
2 个赞