【发布时间】: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 吗?如果是,您是如何获得电子邮件中用于重置密码的重置链接的?