回归导致审批队列中所有用户在60天以上收到错误、不正确的电子邮件通知

在 Discourse 中,您可以指定一种模式:用户注册时会创建账户,但必须由工作人员审批后账户才能激活。例如,这在基于订阅的网站中很常见。

该功能在运作时有两个重要方面:

  1. 当工作人员拒绝账户时,绝不会发送任何负面通知;只有在工作人员批准账户时,才会发送一条正面通知。

  2. 审核队列中的任何项目(无论是帖子还是账户),如果管理员在 60 天内未对该项目采取行动,则默认会被拒绝。这一机制在 Discourse 的许多早期版本中就已存在,因为该路径被设计为“默认安全”。

不幸的是,当我们添加了一项新功能,让用户了解其申请被拒绝的原因时,我们并未意识到上述第 1 点和第 2 点的结合会导致 Discourse 向所有在审批队列中停留超过 60 天的用户单独发送负面通知!

这些电子邮件通知的样式如下:

并在客户的品牌标识下显示:

一名工作人员已在 {brand} 拒绝了您的账户。

向如此多的“被拒绝”账户发送此消息,给托管客户带来了问题。我们对这一错误深表歉意——这完全是 Discourse 的责任,所有指责都应指向我们。

我们目前正在与客户合作,尽一切努力纠正这一问题。

我们想非常明确地说明:这是我们的错误,并且我们向大量客户发送了一封措辞混乱、令人困惑的邮件,造成了相当大的混乱,甚至可能导致客户取消订阅,造成收入损失。我们对此深感抱歉,至少我们可以让所有人知道:这是 Discourse 的问题,我们错误地发送了那封负面邮件。我们对该错误及其后果负全部责任。如果您收到了那封邮件,那并非任何人的过错,而完全是我们 Discourse 的问题。

我们理解此事的严重性。我们将继续与会员提供商及受影响的客户密切合作,为我们的行为承担责任,并改进相关流程,防止此类事件再次发生。

此外,我们将为该客户免费提供下一个月的托管服务,作为对我们所造成问题的补偿。我们真诚地为这一错误及其对客户的影响道歉。我们将重新审视我们的流程,确保此类问题在未来发生的可能性降低。

Jeff Atwood
Discourse 首席执行官

28 个赞

以下是我们为解决该问题并防止其再次发生所采取的措施:

此提交一次性解决了三个问题,这三个问题共同导致了该漏洞,并阻碍了我们快速定位根本原因。

  1. 我们确保在删除用户账户时不会删除“电子邮件日志”。如果我们拥有已删除用户的电子邮件日志,就能迅速看到所有被发送的拒绝邮件。

  2. 我们确保在代码中任何删除用户的地方都正确设置了“上下文”,以便我们能明确 pinpoint 用户被删除的位置和原因。代码中有几处未设置上下文,导致我们不清楚为何这些用户被删除,不得不深入代码进行排查。

  3. 我们修复了实际漏洞,今后将不再向自动删除的可审核用户发送拒绝邮件。

所有这些更改都附带了测试,以确保我们不会引入回归问题。

18 个赞