无法删除带有 PM 的用户,错误消息具有误导性

我们使用了单点登录(SSO),当有人关闭其账户时,我们会通过 API 删除他们的 Discourse 账户(如果存在帖子,则进行匿名化处理)。

然而,似乎有些问题,因为我们在执行此操作时遇到了一些 403 错误。经过一番排查,我发现 API 调用返回的错误信息如下:

{
    "http_code": 403,
    "body": "{\"deleted\":false,\"message\":\"User XXX has 0 posts, so they can't be deleted.\"}"
}

但是,如果帖子数量为 0,应该可以删除才对?查看该特定账户的信息,确实没有公开帖子:

不过,有一条发送给 Discobot(教程)的私信。

因此,我认为这里有几个问题:

  1. 拒绝删除用户的错误消息似乎只统计了公开帖子,但也许它也应该统计私信?
  2. 实际上,私信是否应该阻止账户被删除?我理解在公开话题中删除账户会破坏讨论的连贯性,但在私信中这一理由可能不够充分?
  3. 如果上一个问题的答案仍然是“是”(即私信仍应阻止账户被删除),那么发送给 Discobot 的消息是否也应计入阻止账户删除的考量?我的意思是,大多数人都会完成教程并向 Discobot 发送私信……这使得许多从未参与讨论的账户几乎无法被删除,仅仅因为他们完成了教程(也许这仅在 delete_user_max_post_age 天之后才成立,但即便如此)。

最后,我不确定这是否与第 1 点相关,但在检查该用户的 API 信息时,返回结果如下:
post_count: 0
can_be_deleted: 1
can_delete_all_posts: 0

但实际上,该用户无法被删除。因此,can_be_deleted 的逻辑是否也只统计了公开帖子?

4 个赞

干得漂亮!我们至少应该修复这个错误信息。

"body": "{\"deleted\":false,\"message\":\"用户 XXX 有 0 篇帖子,因此无法删除。\"}"

它应该显示为:

用户有 x 篇帖子,因此无法删除。

考虑到这种情况经常出现,我们可能还应该提示具体原因:

用户有 x 篇帖子(包括公开帖子或个人消息),因此无法删除。

3 个赞

已完成。我还修复了消息中不正确的帖子数量。

4 个赞

感谢 @vinothkannans:+1:

是否有可能顺便检查一下 can_be_deleted 的问题?它似乎表示账户可以删除,但实际上由于存在私信(PM)而无法删除。目前我们不得不先尝试删除用户,如果失败再回退到匿名化处理(因为 can_be_deleted 并不可靠)。

2 个赞

以下主题中讨论的问题是否与当前主题中讨论的问题存在某种关联?

2 个赞

此主题已在 3 天后自动关闭,不再允许新回复。