web-dev-qa-db-ja.com

パスワードの複雑さを強制する

私たちはワードプレスサイトでパスワードの複雑さを強制する必要があります、我々はこの記事を使いました:

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から返されています。パスワードを忘れた場合のリセットそれはうまくいっていないようです。

3
HeavenCore

さて、私の頭を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のエントリはありませんか。

2
HeavenCore