【问题标题】:WordPress: Reset password always invalid keyWordPress:重置密码总是无效的密钥
【发布时间】:2018-12-23 16:20:35
【问题描述】:

我遇到了一个大问题,找不到解决方案。我已经安装了 Ultimate Member Plugin 并激活了它。 ^

当我现在重置用户的密码时,我从我的页面收到一封电子邮件,其中包含在插件的class-password.php 文件中生成的重置链接,该重置链接由触发此函数的 UM 函数调用 um_user( 'password_reset_link' ) 触发:

/**
 * Get Reset URL
 *
 * @return bool|string
 */
function reset_url() {
    $user_id = um_user( 'ID' );
    delete_option( "um_cache_userdata_{$user_id}" );
    //new reset password key via WP native field
    $user_data = get_userdata( $user_id );
    $key = get_password_reset_key( $user_data );
    $url =  add_query_arg( array( 'act' => 'reset_password', 'hash' => $key, 'user_id' => $user_id ), um_get_core_page( 'password-reset' ) );
    return $url;
}

为了检查哈希,我在 WordPress 的 users.php 文件中的函数 get_password_reset_key 中添加了一个 error_log,以通过密钥记录生成的哈希:

error_log( $hashed );

我还在 Ultimate Member 的电子邮件模板中添加了相同的哈希,结果如下:

[23-Dec-2018 15:57:41 UTC] 1545580661:$P$BiLzjLuPDHwVtUlnLmEQE19D4UpgJf0
[23-Dec-2018 15:57:41 UTC] 1545580661:$P$BCAl/MTbiuCyqiix7310EOEn.eJlQz1
[23-Dec-2018 15:57:41 UTC] 1545580661:$P$BH0W.btK4hYFNDidKh.DA46KZhp5Ay.
[23-Dec-2018 15:57:41 UTC] Hash from mail: 1545580661:$P$BOzHQ9mIasqhbdYnkK0n.EXhGXBFyD0
[23-Dec-2018 15:57:41 UTC] 1545580661:$P$BGRg8guQBbhuNKdMCIDSweNUDKLG1v/

如您所见,WordPress 生成了 4 个哈希值,其中一个直接在电子邮件中从返回的key 生成。

当我现在将电子邮件中生成的哈希保存到 users 字段 user_activation_key 的表值中并按下重置按钮时,我可以更改密码。

那么为什么哈希生成不正确,我该如何解决这个问题?我的意思是我可以更改函数并生成一个新的哈希并将其再次写入数据库,但这不是解决方案。

【问题讨论】:

  • 激活密钥未正确更新。不知道为什么。我正在做进一步的研究。
  • 你解决过这个问题吗?
  • @itsdanprice 是的,我做到了。你有这个问题吗?
  • 是的 - 与描述的相同。它没有正确生成电子邮件 - 尽管选择了 html 电子邮件。我正在限制密码重置。重置链接总是导致无效密钥。
  • 你也在使用 UltimateMember 吗?如果是,您是如何获得电子邮件中用于重置密码的重置链接的?

标签: php wordpress


【解决方案1】:

如果有人在使用或不使用插件的情况下仍然存在此问题, 检查电子邮件中的重置链接。 在我的示例链接中是

<https://mywebsite.com/wp-login.php?action=rp&key=XXsomehashXX&login=username>

生成的网址末尾带有字符&gt;,并且 在浏览器中它看起来像这样

https://mywebsite.com/wp-login.php?action=rp&key=XXsomehashXX&login=username%3E

解决此问题只需删除 url 末尾的 %3E 并且密码重置表单正在运行!

【讨论】:

  • 你太棒了!
【解决方案2】:

解决我的 UM 密码重置问题的原因是“无效密钥”是在我的 /password-reset 页面上禁用任何缓存。不确定这是否能解决您的问题,但以防万一其他人来这里。

【讨论】:

  • 我们在设置方面遇到了同样的问题:Wordpress、WooCommerce、Woocommerce 会员资格、WPS 隐藏登录和 Sucuri 防火墙/WAF。禁用自定义登录页面的防火墙缓存解决了这个问题。谢谢!
猜你喜欢
  • 2019-01-11
  • 2015-01-14
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多