如何创建密码重置链接?

时间:2016-09-13 作者:ermSO

我设置了注册工作流,因此我的用户必须填写重力表单用户注册表单,然后通过电子邮件中的链接激活他们的帐户。电子邮件链接会将他们发送到一个页面,告诉用户他们的注册是成功还是失败。成功后,我希望我的用户单击激活成功页面上的密码重置链接来设置他们的密码。构造重置链接时,我不断收到无效链接消息。如何构造有效的密码重置链接??以下是我目前掌握的情况:

<?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://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( __(\'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; ?>

2 个回复
最合适的回答,由SO网友:ermSO 整理而成

经过大量研究,我终于开始检查WordPress核心文件wp\\u登录。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(\'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>
构建链接的重要内容是由get\\u password\\u reset\\u key($user)组合在一起的密钥;这是存储在数据库中的密钥,允许$用户更改其密码。我看到一个网站将其称为cookie;然而,这使用了“cookie”的松散定义,因为用户计算机上没有存储任何内容。密钥存储在数据库中并链接到用户帐户。

SO网友:Rarst

我不确定你想建立什么样的联系,以及它如何与重力形式的细节联系起来(关于哪个问题更适合他们:)

在本机WP情况下,生成丢失密码链接的API方法如下所示wp_lostpassword_url( home_url() ) (重定向参数可选)并且生成的URL具有以下格式: http://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.com.

相关推荐

如何在插件中使用wp_set_password?

我正在为我的多站点安装开发一个私有插件。我希望用户能够从插件设置页面更新其WP密码。我尝试了一些运气不佳的事情。在下面的代码中do_things 从未调用。当我移除add_action 我通过调用wp_set_password.任何帮助都将不胜感激。<?php /* Plugin Name: My Plugin Description: Author: Me Version: 1.0.0 */ class My_New_Plug