私たちはワードプレスサイトでパスワードの複雑さを強制する必要があります、我々はこの記事を使いました:
http://www.webtipblog.com/force-password-complexity-requirements-wordpress/
Functions.phpに以下を作成しました。
add_action('user_profile_update_errors', 'validateProfileUpdate', 10, 3 );
add_filter('registration_errors', 'validateRegistration', 10, 3 );
add_action('validate_password_reset', 'validatePasswordReset', 10, 2 );
function validateProfileUpdate( WP_Error &$errors, $update, &$user ) {
return validateComplexPassword( $errors );
}
function validateRegistration( WP_Error &$errors, $sanitized_user_login, $user_email ) {
return validateComplexPassword( $errors );
}
function validatePasswordReset( WP_Error &$errors, $userData ) {
return validateComplexPassword( $errors );
}
function validateComplexPassword( $errors ) {
$password = ( isset( $_POST[ 'pass1' ] ) && trim( $_POST[ 'pass1' ] ) ) ? $_POST[ 'pass1' ] : null;
if ( empty( $password ) || ( $errors->get_error_data( 'pass' ) ) )
return $errors;
$passwordValidation = validatePassword($password);
if ( $passwordValidation !== true ) {
$errors->add( "pass", "<strong>ERROR</strong>: " . $passwordValidation . "." );
}
return $errors;
}
function validatePassword($Password) {
//#### Check it's greater than 6 Characters
if (strlen($Password) < 6) {
return "Password is too short (" . strlen($Password) . "), please use 6 characters or more.";
}
//#### Test password has uppercase and lowercase letters
if (preg_match("/^(?=.*[a-z])(?=.*[A-Z]).+$/", $Password) !== 1) {
return "Password does not contain a mix of uppercase & lowercase characters.";
}
//#### Test password has mix of letters and numbers
if (preg_match("/^((?=.*[a-z])|(?=.*[A-Z]))(?=.*\d).+$/", $Password) !== 1) {
return "Password does not contain a mix of letters and numbers.";
}
//#### Password looks good
return true;
}
ご覧のとおり、私たちはvalidate_password_reset
フックを使用し、それを使用して、2つの簡単な正規表現でパスワードをテストする私たちのオーダーメイドのvalidatePassword()
関数を呼び出しました。
しかし、このコードは、ユーザーがwp-login.php
を介してパスワードをリセットしたときにまったく呼び出されていないようです - パスワード「woof」(明らかに無効です)を入力して確認することができます。 validateComplexPassword()
関数の中に私たちに電子メールを送るためのコードがいくつかあります。
私たちのコードに何か問題がありますか? validate_password_reset
アクションは呼び出されなくなりましたか?助けて :)
編集:phpエラーログで次のことに気づいた - これは問題だろうか?
[12-Jun-2014 14:38:12 UTC] PHP Warning: Parameter 1 to mycohens_validatePasswordReset() expected to be a reference, value given in C:\inetpub\wwwroot\www.cohenschemist.co.uk\wp-includes\plugin.php on line 470
編集2:wp-admin/profile.phpを使ってパスワードを変更しようとすると完全に動作します。カスタムコードからのエラーはwordpressから返されています。パスワードを忘れた場合のリセットそれはうまくいっていないようです。
さて、私の頭を1のキーボードにぶつけた何時間もの後にこれを直しました。私のフックされた関数の最初のパラメータを参照ではなく値にすることで修正されました - wordpressのほとんどすべてのフックがエラーオブジェクトを参照渡しするときに興味があります!
function validatePasswordReset( &$errors, $userData ) {
return validateComplexPassword( $errors );
}
に変更
function validatePasswordReset( $errors, $userData ) {
return validateComplexPassword( $errors );
}
ほとんどのアクションがコーデックスを参照している理由について興味があります。例えば:
http://codex.wordpress.org/Plugin_API/Action_Reference/user_profile_update_errors
しかしvalidate_password_resetのエントリはありませんか。