仅当用户在Memberpress拥有订阅计划时才允许访问

我的客户使用 WordPress 安装并集成了 MemberPress,用户需在此登录以访问 Discourse。

是否有办法仅允许拥有活跃 MemberPress 计划的用户访问 Discourse?

谢谢,
Per

请参阅我对该主题的首条回复,了解如何限制 Discourse 登录的详细信息:https://meta.discourse.org/t/how-to-prevent-some-wp-users-from-being-able-to-login-to-discourse/93234。这假设 WordPress 站点作为 Discourse 的 SSO 提供商,并且您正在使用 WP Discourse 插件。

1 个赞

谢谢 Simon,太棒了!:slight_smile:

这样我就可以在将用户路由到 Discourse 之前检查其访问权限。
请问你知道有没有好的方法可以检查用户是否拥有有效的订阅?
这将是我决定是否将用户路由到 Discourse 的条件。

谢谢!!

我相信肯定有办法实现,但我不确定如何在 WordPress 中访问用户的 Memberpress 订阅等级。不过,我们的 Support > WordPress 分类下的帖子中可能有相关示例。

好的,谢谢 :slight_smile:
祝您周末愉快!

1 个赞

如果其他人也想实现同样的功能,我找到了解决方案:

Simon:最后一个问题:用户在 Discourse 中登录状态会持续多久?是直到点击“退出登录”按钮之前一直登录,还是会在一段时间后自动登出?

这由 Discourse 的“最大会话时长”(maximum session age)站点设置控制。该设置的默认值为 1440 小时。除非将其设置为非常小的值,否则它并不是登出用户的可靠方式。这是因为它设定的是用户自上次访问以来保持登录状态的时间。将“最大会话时长”设置为极小的数值也可能给您的网站用户带来不便。

我认为最好的方法是在会员资格到期时通过 API 将用户从 Discourse 登出。这里有相关的代码示例:wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub API 将用户从 Discourse 登出。

1 个赞

我可以直接调用 logout_from_discourse() 函数,还是必须复制所有那段代码?

这并不只是简单地调用 logout_from_discourse() 函数,但你可以通过 WordPress 的动作钩子(action hook),在 WordPress 站点触发特定操作(例如用户会员等级被撤销)时调用该函数。Discourse 社区中可能有人能帮助你实现这一功能所需的语法。

1 个赞