设置 DiscourseConnect - Discourse (sso) 官方单点登录

我认为你的主要问题是关于 external_id 字段。你需要在 DiscourseConnect payload 中设置一个 external_id 字段。该字段的值应该是一个与用户相关联的、永远不会改变的字符串。我假设你的应用程序有一个 users 表。该表中用户条目的主键很适合用作 external_id 字段的值。

如果用户在你的网站添加 DiscourseConnect 身份验证之前已经在 Discourse 上创建了帐户,那么当他们第一次通过 DiscourseConnect 登录 Discourse 时,Discourse 会尝试根据 DiscourseConnect payload 中的电子邮件地址查找用户。找到用户后,将在 Discourse 数据库中添加一条记录,其中包含来自 DiscourseConnect payload 的 external_id。下次用户登录时,将通过 external_id 而不是电子邮件地址来查找他们。(请注意,如果将在 DiscourseConnect payload 中将 require_activation 参数设置为 true,则此方法无效。)

Discourse 对大多数边缘情况都有很好的回退机制。存在与用户拥有多个帐户和电子邮件地址相关的问题,这些问题可能会触发错误。有关处理这些情况的一些详细信息,请参见此处:Debug and fixing common DiscourseConnect issues

1 个赞