WordPress自定义密码强度逻辑(非插件)

WordPress密码强度是根据开源库zxcvbn进行判断,文件调用位置:

/wp-admin/js/password-strength-meter.js

(实际运行的是min版:password-strength-meter.min.js)

核心函数是window.passwordStrength = wp.passwordStrength.meter;

		meter : function( password1, disallowedList, password2 ) {
			if ( ! Array.isArray( disallowedList ) )
				disallowedList = [ disallowedList.toString() ];

			if (password1 != password2 && password2 && password2.length > 0)
				return 5;

			if ( 'undefined' === typeof window.zxcvbn ) {
				// Password strength unknown.
				return -1;
			}

			var result = zxcvbn( password1, disallowedList );
			return result.score;
		},

了解原理后,自定义密码强度逻辑便是需要覆盖这里内容。

方法有很多,推荐单独引入一个自定义js文件,专门管理密码。

在主题文件functions.php中添加:

// 加载自定义js
function pury_custom_password_strength() {
    wp_enqueue_script('pury-zxcvbn', '/wp-content/themes/twentytwentyone/pury-zxcvbn.js', array('password-strength-meter'), '', true);
}
add_action('init', 'pury_custom_password_strength');

注意依赖脚本`password-strength-meter.js,因为要覆盖的内容在里面。

pury-zxcvbn.js编写覆盖逻辑,如:

wp.passwordStrength.meter = function(password1, disallowedList, password2) {
    // 字母、数字和特殊字符串至少其中两种
    let reg = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{8,15}$/;
    return reg.test(password1) ? 4 : 0;
}

window.passwordStrength = wp.passwordStrength.meter;

返回强度值0-4,具体介绍见zxcvbn官网。

(版权归cpury.com所有,转载请注明出处。)