WP Discourse 插件允许您在 WordPress 中设置 DiscourseConnect,这样您的用户既可以使用 WordPress 账户登录 Discourse,也可以使用 Discourse 账户登录 WordPress。在设置 DiscourseConnect 之前,您首先需要在 WordPress 上安装 WP Discourse 插件,并将其与您的 Discourse 连接。如果您已准备好开始,请先观看这段简短的视频,或按照下方的说明操作。
下一步
设置好 DiscourseConnect 后,您可能还想查看以下主题:
操作说明
设置密钥
无论您是将 WP Discourse 设置为 DiscourseConnect 的提供者(Provider)还是客户端(Client),都需要设置一个密钥。进入「DiscourseConnect 密钥」选项卡,输入一段文本(允许包含数字、字母和符号),长度至少为 10 个字符。创建此密钥时请遵循与创建强密码相同的规则。完成后请务必保存。
然后,打开您的 Discourse 站点设置(在管理面板中),搜索「discourse connect」。顶部附近的设置中会有一项为 discourse connect secret。将您在 WP Discourse 中设置的密钥粘贴到此处,然后点击绿色对勾。
使用 WordPress 登录 Discourse(DiscourseConnect 提供者)
在遵循以下说明之前,请确保您的 WP Discourse 已连接到 Discourse,并且密钥已设置(
)
若要允许用户使用其 WordPress 账户凭据登录 Discourse,您需要将 WP Discourse 设置为 DiscourseConnect 提供者。进入 WP Discourse 设置中的 DiscourseConnect Provider 选项卡,选中 Enable DiscourseConnect Provider 复选框并保存设置。
接下来,进入您的 Discourse 站点设置,在搜索框中输入「discourse connect」以查看所有 DiscourseConnect 设置。首先,将 discourse connect url 设置为您的 WordPress 网址。最后一步是选择 enable discourse connect。在选中此选项前请确保已做好准备,因为一旦启用,您的用户将只能通过 WordPress 登录 Discourse。
在 Discourse 中启用 DiscourseConnect 后,为确保设置正确,请在浏览器中打开一个无痕窗口。请保持正常的(非无痕)浏览器窗口登录管理员账户(以防万一出现问题需要改回设置)。在无痕窗口中,您会注意到 Discourse 的「注册」按钮不再显示。点击「登录」按钮。您应该会看到 WordPress 登录界面。输入您的 WordPress 凭据进行登录。随后您将被重定向回 Discourse 并成功登录。
如果出现任何问题,或您发现某些地方不太对劲,请返回正常浏览器窗口并禁用 enable discourse connect,以允许用户正常登录 Discourse。如果您因某种原因在正常浏览器窗口中不再登录管理员账户,请查看下方「故障排除」部分中的「通过 Discourse 控制台禁用 DiscourseConnect」章节以重新获取访问权限。
电子邮件验证
Discourse 期望所有用户的电子邮件地址都已验证,而 WordPress 并不强制用户验证电子邮件地址。在默认的 WordPress 设置中,在注册过程中验证用户电子邮件地址相对容易,但如果网站使用了创建前端注册表单的插件(例如,可通过 WooCommerce 添加的注册表单),WP Discourse 插件将无法验证用户的电子邮件。
如果用户的电子邮件在 WordPress 中未得到验证,那么在 WordPress 用户能够登录论坛之前,他们需要响应由 Discourse 发送的电子邮件验证通知。该插件提供了一些过滤器,可用于覆盖此行为。请查看代码以获取详细信息,起点在此处:https://github.com/discourse/wp-discourse/blob/master/lib/sso-provider/discourse-sso.php#L277。
移除 require_activation 标志
如果您确定 WordPress 正在验证电子邮件地址,您可以告知 Discourse 无需再次验证。若要完全移除 require_activation 标志,请将类似以下内容添加到您的 WordPress 中(例如,在主题的 functions.php 文件中):
// 将 'my_prefix' 替换为您网站的前缀。
add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification' );
function my_prefix_discourse_email_verification( $require_activation ) {
return false;
}
若要为特定用户移除 require_activation 标志,请使用类似以下内容:
// 将 'my_prefix' 替换为您网站的前缀。
add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification', 10, 2 );
function my_prefix_discourse_email_verification( $require_activation, $user_id ) {
$user = get_userdata( $user_id );
if ( /* 针对 $user 测试的某些条件 */ ) {
return true;
}
return false;
}
用户数据 Webhook
此 Webhook 的存在是由于历史原因——现在可以通过使用 DiscourseConnect 提供者选项中的「在登录时创建或同步 Discourse 用户」来自动填充 Discourse 名称字段。
当 WordPress 作为 DiscourseConnect 提供者时,可以使用「更新用户数据」Webhook(在「Webhooks」设置面板中)。该 Webhook 会自动填充 WordPress 中用户的 Discourse 名称字段。
创建 DiscourseConnect 登录链接
如果您已启用 DiscourseConnect 提供者选项,可以通过创建具有以下结构的链接,将 DiscourseConnect 登录链接添加到您的 WordPress 网站:
<a href="https://discourse.example.com/session/sso?return_path=/">社区</a>
将 return_path 的值设置为您希望用户最终到达的论坛页面。您可以通过在 WordPress 仪表盘的菜单部分将此结构的 URL 作为自定义链接添加,从而将 SSO 登录链接添加到 WordPress 菜单中。
使用 Discourse 登录 WordPress(DiscourseConnect 客户端)
若要启用您的站点作为 DiscourseConnect 客户端,请点击 DiscourseConnect Client 选项卡。在该页面中,选择 Enable DiscourseConnect Client 和 Add Login Link 选项。
现在进入您的 Discourse 管理/设置页面,搜索「discourse connect」以查看所有 DiscourseConnect 选项。
- 选择「enable discourse connect provider」设置
- 将您的
DiscourseConnect Secret Key从 WordPress 复制到 Discourse 的「discourse connect provider secrets」设置的「secret」字段中。在该设置的「domain」字段中输入您的 WordPress 网站域名。然后点击绿色对勾保存设置。
完成后,Discourse 上的「discourse connect provider secrets」设置应如下所示(域名设置为您的 WordPress 域名):
现在 Discourse 应已作为您 WordPress 网站的 DiscourseConnect 提供者运行。
在浏览器的无痕窗口中打开您的 WordPress 网站。当您现在访问登录页面时,应该在登录表单下方看到「使用 Discourse 登录」链接。点击它,您将被带到 Discourse 登录表单。在那里登录后,您将被重定向回 WordPress 登录页面,并显示一条通知,提示您需要将账户与 Discourse 同步。按照通知中的说明链接您的账户,之后您应该就能通过 Discourse 登录 WordPress 网站了。
注意:此行为仅影响在 WordPress 和 Discourse 上均已有账户的用户。通过 Discourse DiscourseConnect 创建的新 WordPress 账户在首次点击「使用 Discourse 登录」链接时将能够自由登录 WordPress。为了使在 WordPress 网站和 Discourse 论坛上均已有账户的用户更容易通过 Discourse 登录,请在 DiscourseConnect Client 选项卡上选中 Sync Existing Users by Email 复选框。
同步 Discourse 登出
启用 DiscourseConnect 后,可以通过将站点的 home_url 与查询参数 request=logout 添加到 Discourse 站点设置中的 logout redirect 来实现从 Discourse 登出与 WordPress 站点的同步。该设置位于 /admin/site_settings/category/users 的 Discourse 设置部分。以下是「logout redirect」URL 的示例:
http://example.com/?request=logout
故障排除
如果您在使用 WordPress 作为论坛的 DiscourseConnect 提供者时遇到问题,首先应检查以下内容:
- WordPress 和 Discourse 上设置的 DiscourseConnect 密钥是否一致
- 确保已在 WordPress 网站上选中
Enable DiscourseConnect Provider - 确保已在 Discourse 中输入了正确的
discourse connect url
使用 DiscourseConnect 时出现「登录错误」
如果用户在尝试登录 Discourse 时收到「登录错误」消息,请参阅:
https://meta.discourse.org/t/debugging-and-fixing-common-discourseconnect-issues/103496。
禁用 DiscourseConnect
如果 DiscourseConnect 无法正常工作,您可以通过禁用 enable discourse connect 站点设置将其关闭。如果您尚未在任何地方登录管理员账户以关闭它,请不要担心,有几种方法可以重新进入并关闭它。
通过 /users/admin-login 登录
打开新的浏览器窗口,在地址栏中输入您的论坛网址,后跟 /users/admin-login,例如:
https://community.mysite.com/users/admin-login
您应该会看到一个输入框,要求您输入管理员电子邮件。提交电子邮件后,您将收到一封包含链接的电子邮件,该链接允许您直接登录管理员账户。然后,您可以进入站点设置并禁用 enable discourse connect 以关闭 DiscourseConnect。
如果此方法因某种原因无效,请不要担心,您仍然可以通过服务器的控制台关闭 DiscourseConnect(
)
通过服务器控制台关闭 DiscourseConnect
如果您不知道服务器控制台是什么,或者无法访问它,请联系您的托管服务提供商寻求帮助。在通过 SSH 连接到服务器后,您需要运行的命令如下:
cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_discourse_connect=false
exit
exit







