jord8on
(Jordan)
1
继续讨论来自 如何关闭 Discourse 邮件验证?:
Discourse 无法识别我们已验证的账户。以下是我们当前站点设置的相关背景:
我使用的是 WP Discourse 插件,并将 WordPress 作为 SSO 提供商。
当前 SSO 设置 <img>
目前,我使用 WooCommerce (WC) 来管理新用户注册,网址为:https://pickleballist.com/my-account
我使用了一个名为 Booster for WC 的插件,它为 WooCommerce 添加了额外功能,包括要求用户在访问账户前必须先进行邮件验证。
插件选项 <img>
收到的验证邮件 <img>
用户点击账户激活邮件中的链接后,会被重定向到 WordPress 的 /my-account/ 页面。如果用户未点击验证链接而尝试使用注册凭据登录,系统会提示其账户需要先验证,并提供一个可点击的链接以“重新发送验证邮件”。
如果您访问管理控制台中的“用户”页面,可以轻松查看哪些账户已验证,哪些尚未验证。
用户账户与验证状态示意图 <img>
遗憾的是,用户在验证其邮箱后,尝试访问我们的论坛(https://forums.pickleballist.com)时,并不会自动登录。
更糟糕的是,当他们在论坛上点击“登录”按钮时,系统仍要求他们检查邮箱并点击 Discourse 的“确认您的新账户”邮件链接。
有没有办法让 Discourse 根据从 WooCommerce 接收到的元数据,检查用户是否真正已验证?
我猜测这个“邮件验证模块”并未挂钩到 wp_new_user_notification,否则 Discourse 应该能识别到,对吗?我们能否让 Discourse 查找其他挂钩点?
期待大家的见解!
simon
3
只要“Booster for WC”插件能够阻止用户在验证电子邮件地址之前登录 WordPress,该代码就可以安全使用。将其添加到您的主题或插件中后,用户将无需再次验证电子邮件地址即可登录您的 Discourse 站点。
这也是可行的。如果您知道 WooCommerce 设置的元数据键的名称,以及已验证电子邮件地址用户对应的预期返回值,您可以在函数中添加相应的检查。示例如下:
add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
$require_activation = false;
}
return $require_activation;
}
如果您在使用 WooCommerce 时遇到 SSO 登录重定向问题,可能需要在您的站点上安装此插件:https://github.com/scossar/wp-discourse-woocommerce-support。请查看该插件的 readme 文件以了解其具体功能。
jord8on
(Jordan)
4
这段代码果然解决了问题!现在用户只需点击 WordPress 生成的验证链接即可。
非常感谢!
我刚刚添加了该插件,但当用户点击 WordPress 生成的验证链接并完成验证后,他们会被直接带到 WordPress 的 /my-account 页面,而不是返回 Discourse 论坛。请问预期的行为应该是怎样的?
simon
5
我认为验证链接是由 Booster for WC 插件生成的。如果是这种情况,那么我还没有对此进行测试。wp-discourse-woocommerce-support 插件旨在解决的问题是覆盖 WooCommerce 在每次登录尝试时设置的登录重定向。我最近没有用 WooCommerce 进行测试,但过去当网站上安装了 WooCommerce 时,它会阻止未登录的用户在尝试通过 WordPress 登录时被重定向到 Discourse。
预期的行为是:当未登录 WordPress 的用户点击 Discourse 上的登录按钮,或点击发布到 Discourse 的帖子下方生成的 SSO 登录链接时,用户将经过 WordPress 登录流程,然后被重定向到正确的 Discourse URL。如果已验证电子邮件地址的用户遇到此问题无法正常工作,请告诉我。
或许可以让用户点击的验证链接也能正常工作,但我认为这是一个单独的问题。