检查密码重置键不工作

时间:2018-02-25 作者:wpdev

我正在尝试创建passowrd重置表单。以下是我的功能:

<?php 
$user_data = get_user_by( \'email\', \'[email protected]\' ) );
$key = get_password_reset_key( $user_data );
$user_login = $user_data->user_login;

$message = esc_url( get_permalink( \'1\' ) . "?action=rp&key=$key&login=" . rawurlencode($user_login) ) . "\\r\\n";

wp_mail( $user_email, "Title", $message );
?>
它用$key和$login将重置链接发送到我的邮件。没关系。

现在我必须检查重置键。这是我的代码:

<?php 
$errors = new WP_Error();
$user = check_password_reset_key($_GET[\'key\'], $_GET[\'login\']);

if ( is_wp_error( $user ) ) {
    if ( $user->get_error_code() === \'expired_key\' )
        echo "Key is expired";
    else
        echo "Key is not valid";
}
?>
但它总是说Key is not valid. 哪里错了?

1 个回复
最合适的回答,由SO网友:wpdev 整理而成

我把它修好了。我们需要解码urlesc_url_raw. 这是解决方案。

<?php 
$user_data = get_user_by( \'email\', \'[email protected]\' ) );
$key = get_password_reset_key( $user_data );
$user_login = $user_data->user_login;

$url = esc_url_raw( get_permalink( \'1\' ) . "?action=rp&key=$key&login=" . rawurlencode($user_login) ) . "\\r\\n";
$message = $url;

wp_mail( $user_email, "Title", $message );
?>

结束