据我所知,同样的问题曾两次被提及,并被告知已在 2018 年(https://meta.discourse.org/t/discourse-doesnt-redirect-to-return-sso-url-after-user-logs-in-on-private-site/97201)和 2015 年(https://meta.discourse.org/t/login-redirect-during-sso-provider-login/29759)得到修复。但我仍然遇到同样的问题。
我们组织内部署了 Discourse。我们拥有自己的用户账户数据库,因此我们使用自定义的 SSO 登录网站,按照 Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso) 中的说明,允许用户登录 Discourse。该功能运行良好。
此外,我们还拥有 WordPress、Rocket Chat 以及一个自定义的 Tornado Web 应用。它们都依赖 Discourse 作为 SSO 提供商。
对于 WordPress,我们使用 wp-discourse 插件。对于 Rocket Chat 和 Tornado Web 应用,我们遵循了 Use Discourse as an identity provider (SSO, DiscourseConnect) 中的说明。
如果用户已经登录过 Discourse,登录流程运行良好。然而,如果用户尚未登录 Discourse,则所有服务的登录流程(例如 WordPress、Rocket Chat 或 Tornado Web 应用)都无法正常工作。当用户尝试登录 WordPress、Rocket Chat 或 Tornado Web 应用时,他们会被重定向到 discourse.com/login。然后,用户点击登录按钮,这会将他们重定向到我们自定义的 SSO 网站。在那里完成登录后,他们会被重定向回 discourse.com,而不是目标服务(例如 WordPress、Rocket Chat 或 Tornado Web 应用)。
顺便提一下,wp-discourse 的“与 Discourse 同步登出”功能不起作用。当用户登出 WordPress 时,他们仍然保持登录 Discourse 的状态。
在经历了多次 Discourse 更新后的几个月里,我一直面临这个问题。现在我寻求帮助。如果需要任何详细信息,请告知。
我目前的变通方法是:不将用户重定向到 /session/sso_provider,而是将其重定向到 /session/sso?return_path=customurl。缺点是,即使用户已经登录过 Discourse,系统仍会要求他们重新登录。