检查其他网站上用户是否已登录 Discourse

大家好,

我想根据用户是否在我们私有的 Discourse 上拥有会员账户来限制对我们网站上某些页面的访问。我想我可以通过在这些页面上检查用户当时是否在 Discourse 上登录来实现这一点。

我认为合适的工具是:GitHub - discourse/discourse-auth-proxy: An http proxy that uses the DiscourseConnect protocol to authenticate users

是否有关于使用它的分步文档?

我可以在与我们的 Discourse 站点相同的 DigitalOcean 实例上安装它,还是需要将其托管在其他地方?

我能否获得一些关于使用 Discourse Auth Proxy 的帮助?

我在 Digital Ocean 虚拟机上运行 Discourse,并在另一台服务器上运行了一个 PHP 网站。

您可以使用 DiscourseConnect 来实现此目的(以 Discourse 作为身份验证提供者):https://meta.discourse.org/t/use-discourse-as-an-identity-provider-sso-discourseconnect/32974。

我还没有尝试过,但 prompt 参数可能对您的情况有用:

  • prompt: 如果 prompt=none,则 SSO 请求被视为“仅检查”请求。如果浏览器/设备已登录 Discourse,Discourse 将像往常一样返回成功的 SSO 响应,其中包含用户信息。如果浏览器/设备登录,则 Discourse 不会要求用户登录,而是会立即返回一个带有 failed=true 参数的 SSO 响应,而不是用户信息。这提供了一种查询用户是否已登录的机制,而无需在用户未登录时将其重定向到登录对话框。
1 个赞

这看起来很有希望,@simon。我之前没意识到 DiscourseConnect 即使在未启用 enable discourse connect 的情况下也能运行,但显然它可以!:thinking:

我会进行一些测试并汇报结果——感谢你给我指明了方向!

1 个赞

我不知道使用 Discourse 作为身份验证提供商是否因为它的名字(DiscourseConnect)而被忽视了。例如,仅仅在这里的帖子中添加术语 DiscourseConnect 就会创建一个指向关于使用外部网站作为 Discourse 身份验证提供商的帖子的链接。将 Discourse 用作身份验证提供商是我拥有 Discourse 站点的几个主要理由之一。

如果这有帮助的话,WordPress 插件允许 Discourse 充当身份验证提供商。相关代码在这里:https://github.com/discourse/wp-discourse/tree/main/lib/sso-client。代码可能有些过于复杂。

这是一个更直接的 Remix/React 应用程序实现:https://github.com/scossar/discourse_remix_comments/blob/main/app/routes/login.tsx。如果你忽略 TypeScript 的内容,那并不复杂。

3 个赞

@simon 我只是想写信回来感谢你。我认为你早些时候的建议是正确的答案。我在我的网站上实现它时遇到了一些麻烦,但问题似乎主要是因为这是一个半定制的 CMS,有很多不稳定的代码在阻碍。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.