web-dev-qa-db-fra.com

Comment créer un lien de réinitialisation de mot de passe?

Le flux de travail d'enregistrement est défini de sorte que mon utilisateur doit remplir un formulaire d'enregistrement d'utilisateur de formulaires Gravity, puis activer son compte via un lien situé dans un courrier électronique. Le lien de courrier électronique les envoie vers une page qui indique à l'utilisateur si son inscription a été un succès ou un échec. En cas de succès, j'aimerais que mes utilisateurs cliquent sur un lien de réinitialisation de mot de passe sur la page de réussite de l'activation pour définir leur mot de passe. Je continue à recevoir un message de lien non valide lorsque je crée le lien de réinitialisation. Comment créer un lien de réinitialisation de mot de passe valide? Voici ce que j'ai jusqu'à présent:

<?php

global $gw_activate_template;

extract( $gw_activate_template->result );

$url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url('', 'http');
$user = new WP_User( (int) $user_id );

?>

<h2><?php _e('Your account is now active!'); ?></h2>

<div id="signup-welcome">
    <p><span class="h3"><?php _e('Username:'); ?></span> <?php echo $user->user_login ?></p>

<p>To set your password, select the following link:  <a href="http://example.com/wp-login.php?action=rp&key=<?php echo $gw_activate_template->get_activation_key(); ?>&login=<?php echo $user->user_login; ?>" >http://vdlinvestors01.adt.com/wp-login.php?action=rp&amp;key=<?php echo $gw_activate_template->get_activation_key(); ?>&amp;login=<?php echo $user->user_login; ?></a></p>
</div>

<?php if ( $url != network_home_url('', 'http') ) : ?>
    <p class="view"><?php printf( __('Your account is now activated. <a href="%1$s">View the site</a> or <a href="%2$s">Log in</a>'), $url, $url . 'wp-login.php' ); ?></p>
<?php else: ?>
<p class="view"><?php printf( __('Your account is now activated. <a href="%1$s">Log in</a> or go back to the <a href="%2$s">homepage</a>.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?></p>
<?php endif; ?>
4
ermSO

Après de nombreuses recherches, je me suis finalement tourné vers l'examen du fichier principal WordPress wp_login.php en espérant que WP montrerait comment ils le font de manière non obtuse. À partir des informations relatives à la ligne 331 (WP 4.6.1), j’ai rassemblé le code suivant.

<?php

global $gw_activate_template;

extract( $gw_activate_template->result );

$url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url('', 'http');
$user = new WP_User( (int) $user_id );

$adt_rp_key = get_password_reset_key( $user );
$user_login = $user->user_login;
$rp_link = '<a href="' . network_site_url("wp-login.php?action=rp&key=$adt_rp_key&login=" . rawurlencode($user_login), 'login') . '">' . network_site_url("wp-login.php?action=rp&key=$adt_rp_key&login=" . rawurlencode($user_login), 'login') . '</a>';

if ( is_wp_error( $key ) ) {
    return $key;
}

?>

<h2><?php _e('Your account is now active!'); ?></h2>

<div id="signup-welcome">
    <p><span class="h3"><?php _e('Username:'); ?></span> <?php echo $user->user_login ?></p>
    <p>To set your password, select the following link: <?php echo $rp_link; ?></p>
</div>

La chose importante pour construire le lien est la clé qui est assemblée par get_password_reset_key ($ user); Il s'agit d'une clé stockée dans la base de données qui permet à l'utilisateur $ de modifier son mot de passe. J'ai vu un site Web qui le désigne comme un cookie; Cependant, cela utilise une définition vague de "cookie" car rien n'est stocké sur l'ordinateur de l'utilisateur. La clé est stockée dans la base de données et liée au compte d'utilisateur.

4
ermSO

Je ne suis pas sûr du lien que vous essayez de créer et de son lien avec les spécificités de Gravity Forms (quelles questions vous intéressent le mieux :)

Dans le cas natif WP, la méthode de l'API permettant de générer un lien de mot de passe perdu est générée comme suit: wp_lostpassword_url( home_url() ) (argument de redirection facultatif) et l'URL résultante a le format suivant: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com.

1
Rarst