Cum creez un link pentru resetarea parolei?

13 sept. 2016, 16:20:35
Vizualizări: 42K
Voturi: 8

Am configurat fluxul de înregistrare astfel încât utilizatorii mei trebuie să completeze un formular de înregistrare Gravity Forms și apoi să-și activeze contul printr-un link din email. Link-ul din email îi trimite către o pagină care le spune dacă înregistrarea a fost cu succes sau a eșuat. La activarea cu succes, aș dori ca utilizatorii mei să poată da click pe un link de resetare a parolei pe pagina de succes pentru a-și seta parola. Primesc constant un mesaj de link invalid când construiesc link-ul de resetare. Cum pot construi un link valid de resetare a parolei? Iată ce am până acum:

<?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('Contul tău este acum activ!'); ?></h2>

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

<p>Pentru a-ți seta parola, selectează următorul 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://example.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( __('Contul tău este acum activat. <a href="%1$s">Vezi site-ul</a> sau <a href="%2$s">Autentifică-te</a>'), $url, $url . 'wp-login.php' ); ?></p>
<?php else: ?>
<p class="view"><?php printf( __('Contul tău este acum activat. <a href="%1$s">Autentifică-te</a> sau întoarce-te la <a href="%2$s">pagina principală</a>.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?></p>
<?php endif; ?>
0
Toate răspunsurile la întrebare 2
0
15

După multă cercetare, am ajuns să examinez fișierul de bază al WordPress wp_login.php în speranța că WP va arăta cum se face acest lucru într-un mod mai puțin obscur. Din informațiile de pe lângă linia 331 (WP 4.6.1), am asamblat următorul cod.

<?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('Contul tău este acum activ!'); ?></h2>

<div id="signup-welcome">
    <p><span class="h3"><?php _e('Nume de utilizator:'); ?></span> <?php echo $user->user_login ?></p>
    <p>Pentru a-ți seta parola, selectează următorul link: <?php echo $rp_link; ?></p>
</div>

Lucrul important pentru construirea link-ului este cheia care este generată de get_password_reset_key( $user ); Aceasta este o cheie stocată în baza de date care permite utilizatorului să-și schimbe parola. Am văzut un site web care o referă drept "cookie"; totuși, aceasta folosește o definiție largă a termenului "cookie", deoarece nimic nu este stocat pe computerul utilizatorului. Cheia este stocată în baza de date și este legată de contul utilizatorului.

15 sept. 2016 16:07:29
1

Nu sunt sigur ce link încerci să construiești și cum se leagă de specificul Gravity Forms (întrebările despre care sunt mai bine direcționate către ei :)

În cazul nativ al WordPress, metoda API pentru a genera link-ul de recuperare a parolei este generată astfel: wp_lostpassword_url( home_url() ) (argumentul redirect opțional) iar URL-ul rezultat are următorul format: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com.

13 sept. 2016 21:37:06
Comentarii

Caut să creez un link similar cu acest exemplu: http://example.com/wp-login.php?action=rp&key=WhatKey&login=user_login Aș prefera să nu folosesc link-ul standard de recuperare a parolei, deoarece acesta necesită ca utilizatorul să introducă o adresă de email către care este trimis link-ul de resetare a parolei. Doresc ca link-ul meu să ducă direct la pagina de resetare a parolei.

ermSO ermSO
13 sept. 2016 22:32:55