如何在认证网站允许用户更改邮箱时处理 Discourse SSO?

我们使用基于本指南实现的 Discourse SSO 流程:Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

该流程一直运行良好。但现在我们希望允许系统内的用户更改其电子邮件地址,这似乎引发了一些问题。

当我们在系统中更改用户的电子邮件地址时,到 Discourse 的 SSO 登录就会停止工作。

登录错误

您的账户存在问题。请联系站点管理员。

我猜测 Discourse 接收到的负载中包含不匹配的电子邮件和用户名,因此不知如何处理。

有什么好的处理方法吗?

我想到的最佳方案是:在发起 SSO 之前,先使用 Discourse API 将 Discourse 中用户的电子邮件地址更新为与系统中一致。

但我不确定这是否可行。以下是我失败的尝试。

我的请求如下:

https://forum-stage.{domain}.com/users/{username}/preferences/email

Headers:
Content-Type: application/x-www-form-urlencoded
Accept: application/json

Body(在 Postman 中作为 x-www-form-urlencoded 格式):
email: testemail@testdomain.com
api_key: 75a...77d
api_username: system

收到的响应如下:

{
    "errors": [
        "您无权查看所请求的资源。"
    ],
    "error_type": "invalid_access"
}

我也遇到了这个问题——你后来找到解决办法了吗?

这种情况不应发生,我们主要依据 SSO ID 进行识别。

如果您希望主动操作,可以使用同步 SSO 端点在 Discourse 端同步邮箱,但更改您系统中的邮箱应始终有效。

唯一的例外情况是:

Discourse 认为 SSO ID 为 5,邮箱为 bob@jane.com

而您使用 SSO ID 为 6、邮箱为 bob@jane.com 的账户登录。

这种情况无法自动解决,您需要手动干预(请先同步 SSO ID 为 6 的账户)。