web-dev-qa-db-ja.com

Chromeで自動入力を使用すると「パスワードフィールドが空です」というエラーが表示される

Chromeでログイン画面を開くと、ブラウザによってフォームにユーザー名とパスワードが自動的に入力されます。しかし、送信ボタンを押すと、次のメッセージが表示されます。

エラー:パスワードフィールドは空です。

自動入力されたパスワードにスペースを追加して再度削除すると、ログインできます。何が起こっていますか?

11
Robbert

JavaScript関数wp_attempt_focusがこの問題を引き起こしています。この関数はページがロードされた直後に起動し、フォームをクリアしてそれに焦点を合わせ、ユーザーに手動でログイン情報を入力させます。

Chromeはユーザー名とパスワードを自動的に入力します。JS機能がフィールドをクリアするのはわずか数ミリ秒前です。 Chromeは変更を正しく認識しないため、実際には空のフィールドであっても黄色の塗りつぶされたフィールドが表示されます。

私はオートフォーカス機能を高く評価していますが、フォームが自動的にクリアされることを誰かが望んでいるという正当な理由を考えることはできません。

起源

残念ながら、この関数は913〜930行目のwp-login.phpにハードコードされています(WordPress 4.0)。 wp-login.phpファイルを完全に変更することは、今後のWordPressアップデートで上書きされる可能性があるため、悪い考えです。だから我々は少し 'ハッキング'に頼らなければならないでしょう。

簡単な修正

フォームにエラーがない場合はwp_attempt_focus関数が呼び出されます。私たちは運がいいです - エラーチェックはPHPを介して行われます。つまり、WPアクションを使用して適切なタイミングでフォームエラーを偽造することで、関数が起動されないようにすることができます。このアクションは常にJS呼び出しの直前に after エラー処理を起動するので、login_formアクションを選択しました。テーマのfunctions.php(またはプラグインファイル)に次のコードを追加します。

add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
    global $error;
    $error = TRUE;
}

ハックな修正

上記の修正は、関​​数が完全に起動するのを防ぎます。つまり、適切なオートフォーカスも得られません。それを回避する別の方法があります: Geeklab に触発されたように、HTML出力をバッファしてob_startを通してそれを修正するバッファリングにより、コードの特定部分、この場合は自動クリア部分d.value = ''を削除できます。バッファをフラッシュすることを忘れないでください。

add_action("login_form", "kill_wp_attempt_focus_start");
function kill_wp_attempt_focus_start() {
    ob_start("kill_wp_attempt_focus_replace");
}

function kill_wp_attempt_focus_replace($html) {
    return preg_replace("/d.value = '';/", "", $html);
}

add_action("login_footer", "kill_wp_attempt_focus_end");
function kill_wp_attempt_focus_end() {
    ob_end_flush();
}
16
Robbert

私もこの問題を抱えていました。 Scott Allenによるプラグイン "WP-SpamShield"をオフにすると、すべてが再び働き始めました。

0
ERM

私のパスワードはただ空かnullだったので、 "1234"のような他のものに変更しようとしました。スペースを追加して削除しても、JSが無効になることはありませんでした。また別のブラウザを試してみましたので、それは本当にChromeだけでですか?

私がしたのは、データベース内のパスワードハッシュを変更したところ、うまくいったということです。 wp_users.user_pass

私の場合、パスワード1234はBCryptedです:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

http://bcrypthashgenerator.apphb.com/?PlainText=1234

image 

0
P_95