是的,我们的 WordPress 插件提供了一个类似的功能。其工作原理是:当用户创建 WordPress 账户或登录 WordPress 站点时,会向 Discourse 的 /admin/users/sync_sso 路由发起调用。如果该用户尚不存在于 Discourse 中,此调用将创建一个新的 Discourse 用户;如果用户已存在,则可用于更新 SSO 提供商站点上已变更的用户信息,例如姓名、用户名或电子邮件地址。此外,还可用于将用户添加到或从 Discourse 群组中移除。
如需了解 sync_sso 路由的概览,请访问:https://meta.discourse.org/t/sync-sso-user-data-with-the-sync-sso-route/84398。如果您的开发人员希望查看用 PHP 编写的实际示例,可以查看我们 WordPress 插件中的以下文件:https://github.com/discourse/wp-discourse/blob/master/lib/sso-provider/discourse-sso.php。该文件中需要重点关注的函数是 sync_sso。
据我所知,唯一的缺点是这会增加 SSO 代码的复杂性。在 WordPress 插件的实现方式中,每次用户登录 SSO 提供商站点时,都会向 Discourse 发起一次 API 调用,因为该功能已挂钩到 WordPress 的登录事件。我尚未发现该 API 调用在任何站点上引发速率限制问题,但如果确实存在此类问题,可以改为仅在创建新账户时才发起调用。
这种方法的优势在于,它允许您在用户无需通过 SSO 登录 Discourse 的情况下更新其账户信息。例如,当用户在您的网站上执行某些操作时,您可以自动将其添加到特定的 Discourse 群组中。
另一种通过 SSO 将网站与 Discourse 集成的方式是在您的网站上使用 SSO 登录链接。这允许您在网站上嵌入 Discourse 论坛入口,用户点击后即可登录并跳转到指定页面。有关如何设置的具体说明,请参阅此主题:创建 SSO 登录链接。