Erreur «Le champ du mot de passe est vide» lors de l'utilisation de la saisie automatique dans Chrome


10

Lorsque j'ouvre l'écran de connexion sur Chrome, le navigateur remplit automatiquement le formulaire avec mon nom d'utilisateur et mon mot de passe. Cependant, lorsque je clique sur le bouton Envoyer, j'obtiens le message suivant:

ERREUR: le champ du mot de passe est vide.

Ajouter un espace au mot de passe rempli automatiquement et le supprimer à nouveau me permet de me connecter. Que se passe-t-il?

Réponses:


15

La fonction JavaScript wp_attempt_focusest à l'origine de ce problème. La fonction se déclenche peu de temps après le chargement de la page, efface le formulaire et se concentre sur celui-ci, forçant les utilisateurs à saisir manuellement leurs informations de connexion.

Chrome remplit automatiquement le nom d'utilisateur et le mot de passe, quelques millisecondes seulement avant que la fonction JS efface le champ. Chrome ne reprend pas correctement les modifications, affichant des champs remplis de couleur jaune même si les champs sont en fait vides.

Bien que j'apprécie la fonctionnalité de mise au point automatique, je ne peux pas penser à une bonne raison pour laquelle quelqu'un voudrait que le formulaire soit automatiquement effacé.

La source

Malheureusement, la fonction a été codée en dur wp-login.phpdans les lignes 913-930 (WordPress 4.0). Changer wp-login.phpcomplètement le fichier est une mauvaise idée, car il pourrait être écrasé dans toute mise à jour WordPress à venir. Nous devrons donc recourir à un peu de «piratage».

La solution facile

La wp_attempt_focusfonction est appelée si le formulaire ne contient aucune erreur. Nous avons de la chance - la vérification des erreurs se fait via PHP. Cela signifie que nous pouvons simplement empêcher la fonction de se déclencher en simulant une erreur de formulaire au bon moment en utilisant des actions WP. J'ai choisi l' login_formaction car l'action se déclenche toujours après la gestion des erreurs, juste avant l'appel JS. Ajoutez le code suivant à votre thème functions.php(ou fichier de plugin):

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

La solution hackish

Le correctif ci-dessus empêche la fonction de se déclencher complètement, ce qui signifie que vous n'obtiendrez pas non plus la mise au point automatique appropriée. Il existe une autre solution: mettre en tampon la sortie HTML et la modifier via ob_start, comme inspiré par Geeklab . La mise en mémoire tampon nous permet de supprimer des parties spécifiques du code - dans ce cas, la partie autoclear d.value = ''. N'oubliez pas de vider le tampon.

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();
}

2
Exceptionnel. Un correctif doit être appliqué au noyau. J'ai reçu de nombreux commentaires d'utilisateurs qui ont des problèmes avec cela. Merci d'avoir partagé le correctif.
Christine Cooper

Merci pour la solution. Pensez également que cela ne devrait pas être au cœur.
ThiagoPonte

0

J'ai eu ce problème également. Désactivé le plugin "WP-SpamShield" de Scott Allen et tout recommença à fonctionner.


0

Mon mot de passe était juste vide / nul alors j'ai essayé de le changer en quelque chose d'autre, comme "1234". L'ajout et la suppression de l'espace n'ont pas fonctionné ni la désactivation de JS. A également essayé un navigateur différent, est-ce vraiment uniquement dans Chrome?

Ce que j'ai fait, c'est que j'ai changé le hachage de mot de passe dans la base de données et cela a fonctionné. wp_users.user_pass.

dans mon cas, le mot de passe 1234est comme BCrypted:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

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

image

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.