web-dev-qa-db-fra.com

La clé de réinitialisation du mot de passe ne fonctionne pas

J'essaie de créer un formulaire de réinitialisation de mot de passe. Voici ma fonction:

<?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 );
?>

Il envoie le lien de réinitialisation à mon courrier, avec $ key et $ login. C'est bon.

Maintenant, je dois vérifier la clé de réinitialisation. Voici mon code:

<?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";
}
?>

Mais il dit toujours La clé n'est pas valide . Où est le problème?

1
bilimokur

Je l'ai corrigé. Nous avons besoin d'URL de décodage avec esc_url_raw . Voici la solution.

<?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 );
?>
2
bilimokur