it-swarm.com.de

Wie erstelle ich einen Link zum Zurücksetzen des Passworts?

Ich habe den Registrierungsworkflow so eingestellt, dass mein Benutzer ein Registrierungsformular für Schwerkraftformulare ausfüllen und dann sein Konto über einen Link in einer E-Mail aktivieren muss. Der E-Mail-Link sendet sie an eine Seite, die dem Benutzer mitteilt, ob die Registrierung erfolgreich war oder fehlgeschlagen ist. Bei Erfolg möchte ich, dass meine Benutzer auf der Aktivierungserfolgsseite auf einen Link zum Zurücksetzen des Passworts klicken, um ihr Passwort festzulegen. Ich erhalte immer wieder eine ungültige Linkmeldung, wenn ich den Reset-Link erstelle. Wie erstelle ich einen gültigen Link zum Zurücksetzen des Passworts? Folgendes habe ich bisher:

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

Nach langem Nachforschen habe ich mich endlich mit der Untersuchung der WordPress-Kerndatei wp_login.php befasst und gehofft, dass WP zeigen würde, wie sie es auf nicht stumpfe Weise machen. Aus den Informationen um Zeile 331 (WP 4.6.1) habe ich den folgenden Code zusammengestellt.

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

Das Wichtigste beim Erstellen des Links ist der Schlüssel, der von get_password_reset_key ($ user) erstellt wird. Dies ist ein in der Datenbank gespeicherter Schlüssel, mit dem der Benutzer $ sein Kennwort ändern kann. Ich habe eine Website gesehen, die darauf als Cookie verweist. Hierbei wird jedoch eine lose Definition von "Cookie" verwendet, da auf dem Computer des Benutzers nichts gespeichert ist. Der Schlüssel wird in der Datenbank gespeichert und mit dem Benutzerkonto verknüpft.

4
ermSO

Ich bin mir nicht sicher, welche Verbindung Sie herstellen möchten und wie sie mit den Besonderheiten der Schwerkraftformen zusammenhängt (Fragen, die sich besser an sie richten :)

Im nativen WP Fall wird die API-Methode zum Herstellen eines Links für verlorene Kennwörter wie folgt generiert: wp_lostpassword_url( home_url() ) (Redirect-Argument optional) und die resultierende URL hat folgendes Format: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com.

1
Rarst