要么需要提供一个设置来关闭确认邮件,要么需要为“撤销管理员”操作提供确认邮件。因为我通过 API 设置了修改管理员的功能,却无法在系统中实际使用它,结果导致我自己的账户以及多个其他账户丢失了管理员权限。这是因为系统要求通过邮件确认,但不知为何该操作并未触发确认邮件?而且,“撤销”操作本身根本不需要确认。
我个人的首选方案是:提供一个设置,允许在 API 层面关闭确认邮件。
要么需要提供一个设置来关闭确认邮件,要么需要为“撤销管理员”操作提供确认邮件。因为我通过 API 设置了修改管理员的功能,却无法在系统中实际使用它,结果导致我自己的账户以及多个其他账户丢失了管理员权限。这是因为系统要求通过邮件确认,但不知为何该操作并未触发确认邮件?而且,“撤销”操作本身根本不需要确认。
我个人的首选方案是:提供一个设置,允许在 API 层面关闭确认邮件。
我刚刚在自己的网站上测试了这一点。通过 API 撤销管理员权限的方法是向 https://forum.yourdomain.com/admin/users/<user_id>/revoke_admin 发送 PUT 请求。当我尝试此操作时,管理员权限被成功撤销,且无需邮件确认。不过,我发现 Discourse 对此请求的响应存在一些问题。
如果用户 确实 拥有管理员权限,当我通过 API 撤销其权限时,收到的响应是空的,而不是成功消息。
如果用户 没有 管理员权限,当 PUT 请求发送到 https://forum.yourdomain.com/admin/users/<user_id>/revoke_admin 时,我会收到 HTML 响应;而如果请求发送到 https://forum.yourdomain.com/admin/users/<user_id>/revoke_admin.json,则会收到 invalid access 错误。
最好能为该路由提供明确的成功和失败消息。
关于在无需确认邮件的情况下 授予 管理员权限,我持保留态度。当前的工作方式旨在提供额外的安全层。
这正是问题所在:撤销操作本不需要验证,但执行时却要求验证。如果你不了解这一点,就可能意外撤销所有管理员权限,导致无法恢复……
如果你打算将“创建验证”设为必需项,那么“撤销操作”也应具备相应的验证机制。
此外,目前无法关闭此验证功能。如果你拥有一个拥有全部权限的管理员账户,就可以直接通过 API 授予管理员权限。