Статьи

Использование включенного скрипта для проверки надежности пароля в WordPress

WordPress использует довольно изящный сценарий надежности пароля, который используется для отображения того, являются ли пароли, которые вы ввели в админке WordPress: не такими, очень слабыми, слабыми, средними или сильными. В настоящее время этот скрипт используется только при создании новых пользователей и при смене пароля у администратора.

В этой статье я расскажу вам, как использовать измеритель надежности пароля WordPress в ваших собственных формах.

На момент написания этой статьи скрипт измерителя прочности недокументирован, поэтому для его использования требуется немного углубиться в ядро ​​WordPress. Фактический скрипт находится внутри WordPress по адресу wp-admin/js/password-strength-meter.js . Вы можете проверить это, чтобы узнать больше о том, как работает скрипт.

Первое, что нам нужно сделать, это включить этот скрипт, поставив его в очередь в нашем functions.php :

1
wp_enqueue_script( ‘password-strength-meter’ );

Один сценарий не делает все для нас. Это просто дает нам эти две функции JavaScript:

  • wp.passwordStrength.meter( password1, blacklist, password2 ). Это основная функция, которую мы будем использовать. Он анализирует две заданные строки, затем выдает силу этих двух чисел от 1 до 5, 1 — самая слабая, а 5 — самая сильная. Он также принимает массив слов из черного списка, которые будут рассматриваться во время вычисления как слабые слова.
  • wp.passwordStrength.userInputBlacklist(). Эта функция создает массив слов, которые следует рассматривать как слабые слова в паролях. Эта функция компилирует строки, найденные в заголовке, слогане и URL вашего сайта. Он также проверяет наличие определенных полей ввода на текущей странице, а затем добавляет их в список.

Мы уже можем измерить надежность паролей только этими функциями выше. Тем не менее, это еще не все. Скрипт не дает нам результатов, которые мы можем отобразить. Для этого нам нужно создать собственную функцию.

Давайте возьмем этот <form> в качестве отправной точки в реализации функции измерителя прочности:

1
2
3
4
5
6
<form>
 <input type=»password» name=»password» />
 <input type=»password» name=»password_retyped» />
 <span id=»password-strength»>
 <input type=»submit» disabled=»disabled» value=»Submit» />
</form>

Мы будем использовать names полей и ids сверху в функции, которую мы создадим.

Вот цели, которых мы хотим достичь, когда закончим:

  1. Когда что-то набирается в наших полях пароля, мы проверяем надежность пароля,
  2. Затем мы отображаем результаты надежности под полями пароля, аналогично тому, как это делает WordPress,
  3. Наконец, мы включаем кнопку отправки, если пароль считается надежным.

Позвольте мне сначала показать вам готовую функцию jQuery, которую мы будем использовать. Я подробно объясню каждую часть позже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function checkPasswordStrength( $pass1,
                                $pass2,
                                $strengthResult,
                                $submitButton,
                                blacklistArray ) {
        var pass1 = $pass1.val();
    var pass2 = $pass2.val();
 
    // Reset the form & meter
    $submitButton.attr( ‘disabled’, ‘disabled’ );
        $strengthResult.removeClass( ‘short bad good strong’ );
 
    // Extend our blacklist array with those from the inputs & site data
    blacklistArray = blacklistArray.concat( wp.passwordStrength.userInputBlacklist() )
 
    // Get the password strength
    var strength = wp.passwordStrength.meter( pass1, blacklistArray, pass2 );
 
    // Add the strength meter results
    switch ( strength ) {
 
        case 2:
            $strengthResult.addClass( ‘bad’ ).html( pwsL10n.bad );
            break;
 
        case 3:
            $strengthResult.addClass( ‘good’ ).html( pwsL10n.good );
            break;
 
        case 4:
            $strengthResult.addClass( ‘strong’ ).html( pwsL10n.strong );
            break;
 
        case 5:
            $strengthResult.addClass( ‘short’ ).html( pwsL10n.mismatch );
            break;
 
        default:
            $strengthResult.addClass( ‘short’ ).html( pwsL10n.short );
 
    }
 
    // The meter function returns a result even if pass2 is empty,
    // enable only the submit button if the password is strong and
    // both passwords are filled up
    if ( 4 === strength && » !== pass2.trim() ) {
        $submitButton.removeAttr( ‘disabled’ );
    }
 
    return strength;
}
 
jQuery( document ).ready( function( $ ) {
    // Binding to trigger checkPasswordStrength
    $( ‘body’ ).on( ‘keyup’, ‘input[name=password1], input[name=password2]’,
        function( event ) {
            checkPasswordStrength(
                $(‘input[name=password]’), // First password field
                $(‘input[name=password_retyped]’), // Second password field
                $(‘#password-strength’), // Strength meter
                $(‘input[type=submit]’), // Submit button
                [‘black’, ‘listed’, ‘word’] // Blacklisted words
            );
        }
    );
});

Я сделал так, чтобы функция принимала все объекты, которые мы будем изменять или нуждаемся в информации. Я поставил перед всеми объектами jQuery префикс $ чтобы их было легче отличить от обычных объектов JavaScript.

1
2
3
4
5
6
var pass1 = $pass1.val();
var pass2 = $pass2.val();
 
// Reset the form & meter
$submitButton.attr( ‘disabled’, ‘disabled’ );
$strengthResult.removeClass( ‘short bad good strong’ );

Эти первые несколько строк просты и понятны, мы получаем пароли, а затем сбрасываем нашу форму. Мы делаем форму всегда отключенной в начале, чтобы ее можно было включить позже, после того, как мы получим хороший счет силы.

Мы также собираемся добавить стили к нашему измерителю прочности, дав ему имена классов в зависимости от оценки пароля позже, для начала функции мы собираемся очистить стиль измерителя.

1
2
// Extend our blacklist array with those from the inputs & site data
blacklistArray = blacklistArray.concat( wp.passwordStrength.userInputBlacklist() );

Слова в черном списке сценария измерителя прочности обычно должны быть в порядке. Но только если вы хотите добавить больше, наша функция может принимать дополнительные слова. Оба они объединены здесь для ввода в функцию meter .

1
2
// Get the password strength
var strength = wp.passwordStrength.meter( pass1, blacklistArray, pass2 );

Теперь мы вызываем функцию meter чтобы получить показатель надежности пароля. Далее мы решим, что делать с результатом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Add the strength meter results
switch ( strength ) {
 
    case 2:
        $strengthResult.addClass( ‘bad’ ).html( pwsL10n.bad );
        break;
 
    case 3:
        $strengthResult.addClass( ‘good’ ).html( pwsL10n.good );
        break;
 
    case 4:
        $strengthResult.addClass( ‘strong’ ).html( pwsL10n.strong );
        break;
 
    case 5:
        $strengthResult.addClass( ‘short’ ).html( pwsL10n.mismatch );
        break;
 
    default:
        $strengthResult.addClass( ‘short’ ).html( pwsL10n.short );
 
}

Теперь, когда у нас есть показатель силы, мы показываем его. WordPress предоставляет нам объект JavaScript pwsL10n который содержит метки для каждого показателя силы. Мы отображаем метку внутри <span> чуть ниже полей пароля, мы также назначаем соответствующий класс стиля для метки.

1
2
3
4
5
6
// The meter function returns a result even if pass2 is empty,
// enable only the submit button if the password is strong and
// both passwords are filled up
if ( 4 === strength && » !== pass2.trim() ) {
    $submitButton.removeAttr( ‘disabled’ );
}

Конец функции предназначен для включения нашей кнопки отправки, только если у нас есть надежный пароль.

01
02
03
04
05
06
07
08
09
10
11
12
13
jQuery( document ).ready( function( $ ) {
    $( ‘body’ ).on( ‘keyup’, ‘input[name=password1], input[name=password2]’,
        function( event ) {
            checkPasswordStrength(
                $( ‘input[name=password]’ ), // First password field
                $( ‘input[name=password_retyped]’ ), // Second password field
                $( ‘#password-strength’ ), // Strength meter
                $( ‘input[type=submit]’ ), // Submit button
                [‘black’, ‘listed’, ‘word’] // Blacklisted words
            );
        }
    );
});

Наконец, нам нужен способ запуска, когда нужно запускать нашу программу проверки надежности пароля. Мы делаем это, привязывая обработчик к событиям keyup к полям пароля.

Были сделаны!

Метки для измерителя прочности загружаются WordPress под объектом pwsL10n .

Чтобы изменить и переопределить эти метки, вам нужно будет локализовать скрипт после нашего wp_enqueue_script в functions.php :

1
2
3
4
5
6
7
8
wp_localize_script( ‘password-strength-meter’, ‘pwsL10n’, array(
    ’empty’ => __( ‘Strength indicator’ ),
    ‘short’ => __( ‘Very weak’ ),
    ‘bad’ => __( ‘Weak’ ),
    ‘good’ => _x( ‘Medium’, ‘password strength’ ),
    ‘strong’ => __( ‘Strong’ ),
    ‘mismatch’ => __( ‘Mismatch’ )
) );
Подробнее о передаче локализованных строк в JavaScript вы можете прочитать в статье: Как передать PHP-данные и строки в JavaScript

В этой статье мы узнали, как использовать сценарий надежности пароля, который входит в состав WordPress. Это может быть использовано в ваших пользовательских регистрационных формах и страницах профиля пользователя для участников вашего сайта.

Я надеюсь, вам понравилась эта статья. Я высоко ценю любые отзывы, комментарии и предложения.

Дайте мне знать, если вы нашли классный способ использовать измеритель надежности пароля. Поделитесь своими мыслями ниже!