在wp-login.php密码重置页面中添加确认密码字段

时间:2017-04-05 作者:zzMzz

我正在WordPress网站上工作,我想修改密码重置屏幕/wp-login.php?action=rp. 当前,密码重置屏幕为用户生成新密码,我想添加Confirm Password 字段,并将其设置为必填字段。

我想我已经在wp-login.php 文件,它看起来有一个确认密码选项,但我不知道如何让它出现。

<form name="resetpassform" id="resetpassform" action="<?php echo esc_url( network_site_url( \'wp-login.php?action=resetpass\', \'login_post\' ) ); ?>" method="post" autocomplete="off">
<input type="hidden" id="user_login" value="<?php echo esc_attr( $rp_login ); ?>" autocomplete="off" />

<div class="user-pass1-wrap">
    <p>
        <label for="pass1"><?php _e( \'New password\' ) ?></label>
    </p>

    <div class="wp-pwd">
        <span class="password-input-wrapper">
            <input type="password" data-reveal="1" data-pw="<?php echo esc_attr( wp_generate_password( 16 ) ); ?>" name="pass1" id="pass1" class="input" size="20" value="" autocomplete="off" aria-describedby="pass-strength-result" />
        </span>
        <div id="pass-strength-result" class="hide-if-no-js" aria-live="polite"><?php _e( \'Strength indicator\' ); ?></div>
    </div>
</div>

<p class="user-pass2-wrap">
    <label for="pass2"><?php _e( \'Confirm new password\' ) ?></label><br />
    <input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="off" />
</p>

<p class="description indicator-hint"><?php echo wp_get_password_hint(); ?></p>
<br class="clear" />

<?php
/**
 * Fires following the \'Strength indicator\' meter in the user password reset form.
 *
 * @since 3.9.0
 *
 * @param WP_User $user User object of the user whose password is being reset.
 */
do_action( \'resetpass_form\', $user );
?>
<input type="hidden" name="rp_key" value="<?php echo esc_attr( $rp_key ); ?>" />
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e(\'Reset Password\'); ?>" /></p>
</form>

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

很容易把pass2 但这还不够。

在文件中/wp-admin/js/user-profile.js 这个bindPass1() 将其绑定到pass1 那就不可能给它写信了。这个pass2 然后在中隐藏输入bindPasswordForm() 具有$(\'.user-pass2-wrap\').hide();

我们可以添加自己的输入字段来验证密码。

首先,我们通过resetpass_form 措施:

add_action( \'resetpass_form\', function( $user )
{ ?> <p class="user-wpse-pass2-wrap">
        <label for="wpse-pass2"><?php _e( \'Confirm new password\' ) ?></label><br />
        <input type="password" name="wpse-pass2" id="wpse-pass2" class="input" 
               size="20" value="" autocomplete="off" />
    </p> <?php
} );
然后我们使用validate_password_reset 钩子来验证它:

add_action( \'validate_password_reset\', function( $errors )
{
    if ( isset( $_POST[\'pass1\'] ) && $_POST[\'pass1\'] != $_POST[\'wpse-pass2\'] )
        $errors->add( \'password_reset_mismatch\', __( \'The passwords do not match.\' ) );
} );
这只是使用了与我们在wp-login.php 文件

这就是冰岛语中出现不匹配时的情况:

reset

Plugin

在以下位置创建插件:

/wp-content/plugins/wpse-confirm-password/wpse-confirm-password.php
并将以下代码添加到该文件中:

<?php
/**
 * Plugin Name: Confirm New Login Password
 * Plugin URI:  http://wordpress.stackexchange.com/a/262607/26350
 */

add_action( \'resetpass_form\', function( $user )
{ ?> <p class="user-wpse-pass2-wrap">
        <label for="wpse-pass2"><?php _e( \'Confirm new password\' ) ?></label><br />
        <input type="password" name="wpse-pass2" id="wpse-pass2" class="input" 
               size="20" value="" autocomplete="off" />
    </p> <?php
} );

add_action( \'validate_password_reset\', function( $errors )
{
    if ( isset( $_POST[\'pass1\'] ) && $_POST[\'pass1\'] != $_POST[\'wpse-pass2\'] )
        $errors->add( \'password_reset_mismatch\', __( \'The passwords do not match.\' ) );
} );
然后像往常一样从后端激活插件。

SO网友:Fayaz

除了非常有用的Plugin CODE @birgire added in his answer, 在“密码重置”页面上隐藏密码文本(键入密码字段时)也可能很有用。由于使用此代码,我们将有“确认密码”字段,因此在键入时显示密码是没有意义的。

WordPress core没有添加确认密码字段的原因主要是WordPress在您键入密码时已经显示了密码文本。确认密码字段是该功能的替代项,当用户在其他人面前键入时,它会非常有用(更安全)。

因此,我建议您在birgire的插件代码之外添加以下代码:

add_action( \'login_enqueue_scripts\', function ()
{
    if ( ! wp_script_is( \'jquery\', \'done\' ) ) {
        wp_enqueue_script( \'jquery\' );
    }
    // this line basically hides the password text
    wp_add_inline_script( \'jquery-migrate\', \'jQuery(document).ready(function(){ jQuery( "#pass1" ).data( "reveal", 0 ); });\' );
}, 1 );
当然,在这种情况下,WordPress不会自动为您生成密码,因为显然是自动生成密码&;那么隐藏密码文本就没有意义了,因为用户将无法看到它&;在确认密码字段中键入。

无论如何,如果您想使用此插件,那么最终的插件代码将是:

<?php
/**
 * Plugin Name: Confirm New Login Password
 * Plugin URI:  https://wordpress.stackexchange.com/a/262851/110572
 */

add_action( \'resetpass_form\', function( $user )
{ ?> <p class="user-wpse-pass2-wrap">
        <label for="wpse-pass2"><?php _e( \'Confirm new password\' ) ?></label><br />
        <input type="password" name="wpse-pass2" id="wpse-pass2" class="input" 
               size="20" value="" autocomplete="off" />
    </p> <?php
} );

add_action( \'validate_password_reset\', function( $errors )
{
    if ( isset( $_POST[\'pass1\'] ) && $_POST[\'pass1\'] != $_POST[\'wpse-pass2\'] )
        $errors->add( \'password_reset_mismatch\', __( \'The passwords do not match.\' ) );
} );

add_action( \'login_enqueue_scripts\', function ()
{
    if ( ! wp_script_is( \'jquery\', \'done\' ) ) {
        wp_enqueue_script( \'jquery\' );
    }
    wp_add_inline_script( \'jquery-migrate\', \'jQuery(document).ready(function(){ jQuery( "#pass1" ).data( "reveal", 0 ); });\' );
}, 1 );

相关推荐

How to change password

我有一个博客。我的电脑几个月前死机了,我的用户名是admin 我试图恢复我的密码,但由于密码丢失,创建一个新的密码,他们发送了一个巨大的长地址密码,不允许我复制,我只是不知道该怎么办。我最近再次支付了网站托管费用,无法使用我的仪表板。