为什么我的自定义密码重置链接被视为无效?

时间:2018-02-09 15:23:40

标签: php mysql wordpress

我的目标是向我的用户发送一封包含链接的电子邮件,该链接会将用户帐户直接转到密码重置页面,即用户输入新密码的页面。

我使用get_password_reset_key函数生成一个放在自定义URL中的密钥,但是,当我测试它时,我被重定向到密码重置页面时出现无效的密钥错误。

$resetpasskey = get_password_reset_key($row[1]);
$reseturl = "http://nameofmysite.co.uk/my-account/lost-password/?key=".$resetpasskey."&login=".$row[1]; 
wp_mail('dean@dean.co.uk','test key',$reseturl);

该键输出的值看起来像一个有效的重置键,标准长度为20个字符。

$Row[1]是目标用户的用户名。

$Reseturl是我电子邮件中的密码重置网址。

1 个答案:

答案 0 :(得分:3)

我强烈怀疑它无效的原因是因为你输入了错误的参数。

如果查看get_password_reset_key()的WordPress代码,您会发现它希望参数为WP_User - 而不是用户名(代码注释来自下面的WP代码):

/**
 * Creates, stores, then returns a password reset key for user.
 *
 * @since 4.4.0
 *
 * @global wpdb         $wpdb      WordPress database abstraction object.
 * @global PasswordHash $wp_hasher Portable PHP password hashing framework.
 *
 * @param WP_User $user User to retrieve password reset key for.
 *
 * @return string|WP_Error Password reset key on success. WP_Error on error.
 */
function get_password_reset_key( $user ) {

因此,考虑到您共享的代码,您需要按照以下几行修改它:

// I'd recommend changing to use `$row['username']`, but that depends on how you get the data
$user = get_user_by( 'login', $row[1] );
$resetpasskey = get_password_reset_key( $user );