我们使用了单点登录(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(教程)的私信。
因此,我认为这里有几个问题:
- 拒绝删除用户的错误消息似乎只统计了公开帖子,但也许它也应该统计私信?
- 实际上,私信是否应该阻止账户被删除?我理解在公开话题中删除账户会破坏讨论的连贯性,但在私信中这一理由可能不够充分?
- 如果上一个问题的答案仍然是“是”(即私信仍应阻止账户被删除),那么发送给 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 个赞
感谢 @vinothkannans!
是否有可能顺便检查一下 can_be_deleted 的问题?它似乎表示账户可以删除,但实际上由于存在私信(PM)而无法删除。目前我们不得不先尝试删除用户,如果失败再回退到匿名化处理(因为 can_be_deleted 并不可靠)。
2 个赞
griffin
(Jonathan Griffin)
6
以下主题中讨论的问题是否与当前主题中讨论的问题存在某种关联?
2 个赞