web-dev-qa-db-ja.com

パスワードリセットリンクを作成する方法

私は自分のユーザーがグラビティフォームのユーザー登録フォームに記入してから電子メールのリンクを介して自分のアカウントをアクティブにする必要があるように、登録ワークフローを設定しました。電子メールリンクは、登録が成功したか失敗したかをユーザーに知らせるページにそれらを送信します。成功したら、アクティベーション成功ページのパスワードリセットリンクをクリックしてパスワードを設定します。リセットリンクを作成すると、無効なリンクメッセージが表示され続けます。有効なパスワードリセットリンクを作成するにはどうすればよいですか。これが私がこれまでに持っているものです:

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

多くの調査を経て、私はついに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('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_password_reset_key($ user)によってまとめられるキーです。これはデータベースに格納されているキーで、$ユーザーはパスワードを変更できます。クッキーと呼ばれるウェブサイトを見ました。しかし、これは "cookie"のゆるい定義を使用しています。ユーザーのコンピュータには何も保存されていないからです。キーはデータベースに保存され、ユーザーアカウントにリンクされます。

4
ermSO

どのようなリンクを構築しようとしているのか、それがどのように重力フォームの詳細に関連しているのかわかりません(どちらについての質問がより適切かを狙っています)。

ネイティブWPの場合、失われたパスワードリンクを生成するためのAPIメソッドはこのwp_lostpassword_url( home_url() )(リダイレクト引数はオプション)のように生成され、結果のURLのフォーマットはhttp://example.com/wp-login.php?action=lostpassword&redirect_to=http://example.comです。

1
Rarst