Как создать ссылку для сброса пароля?

13 сент. 2016 г., 16:20:35
Просмотры: 42K
Голосов: 8

У меня настроен процесс регистрации так, что пользователи должны заполнить форму регистрации Gravity Forms, а затем активировать свою учетную запись по ссылке в письме. Ссылка из письма перенаправляет их на страницу, которая сообщает пользователю об успешной или неуспешной регистрации. После успешной активации я хочу, чтобы пользователи могли нажать на ссылку сброса пароля на странице успешной активации, чтобы установить свой пароль. Я постоянно получаю сообщение о недействительной ссылке, когда создаю ссылку для сброса. Как правильно создать действительную ссылку для сброса пароля? Вот что у меня есть на данный момент:

<?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('Ваша учетная запись теперь активна!'); ?></h2>

<div id="signup-welcome">
    <p><span class="h3"><?php _e('Имя пользователя:'); ?></span> <?php echo $user->user_login ?></p>

<p>Чтобы установить пароль, перейдите по следующей ссылке: <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( __('Ваша учетная запись теперь активирована. <a href="%1$s">Просмотреть сайт</a> или <a href="%2$s">Войти</a>'), $url, $url . 'wp-login.php' ); ?></p>
<?php else: ?>
<p class="view"><?php printf( __('Ваша учетная запись теперь активирована. <a href="%1$s">Войти</a> или вернуться на <a href="%2$s">главную страницу</a>.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?></p>
<?php endif; ?>
0
Все ответы на вопрос 2
0
15

После долгих исследований я наконец обратился к изучению основного файла WordPress wp_login.php, надеясь, что WP покажет, как это делается без лишних сложностей. На основании информации вокруг строки 331 (WP 4.6.1) я собрал следующий код.

<?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('Ваша учетная запись активирована!'); ?></h2>

<div id="signup-welcome">
    <p><span class="h3"><?php _e('Имя пользователя:'); ?></span> <?php echo $user->user_login ?></p>
    <p>Чтобы установить пароль, перейдите по следующей ссылке: <?php echo $rp_link; ?></p>
</div>

Важным элементом для создания ссылки является ключ, который формируется функцией get_password_reset_key( $user ); Это ключ, который хранится в базе данных и позволяет пользователю изменить пароль. Я видел сайт, где его называют куки; однако это вольное определение термина "куки", так как ничего не сохраняется на компьютере пользователя. Ключ хранится в базе данных и связан с учетной записью пользователя.

15 сент. 2016 г. 16:07:29
1

Я не уверен, какую именно ссылку вы пытаетесь создать и как это связано с особенностями Gravity Forms (вопросы по которым лучше адресовать их поддержке :)

В нативном WordPress API метод для генерации ссылки на восстановление пароля создается так: wp_lostpassword_url( home_url() ) (аргумент redirect не обязателен), а итоговая ссылка имеет следующий формат: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com.

13 сент. 2016 г. 21:37:06
Комментарии

Я хочу создать ссылку, подобную этому примеру: http://example.com/wp-login.php?action=rp&key=WhatKey&login=user_login Я предпочитаю не использовать стандартную ссылку для восстановления пароля, так как она требует от пользователя ввода email, на который отправляется ссылка для сброса пароля. Мне нужно, чтобы моя ссылка вела напрямую на страницу сброса пароля.

ermSO ermSO
13 сент. 2016 г. 22:32:55