Erreur 'Le champ du mot de passe est vide' lors de l'utilisation du remplissage automatique dans Chrome

11

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 d'envoi, le message suivant s'affiche:

  

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?

    
posée Robbert 05.10.2014 - 21:36

3 réponses

16

La fonction JavaScript wp_attempt_focus est à 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 renseigne automatiquement le nom d'utilisateur et le mot de passe, quelques millisecondes seulement avant que la fonction JS n'efface le champ. Chrome ne récupère pas correctement les modifications et affiche des champs remplis de couleur jaune, même s'ils sont vides.

Bien que j'apprécie la fonctionnalité de mise au point automatique, je ne vois pas pourquoi tout le monde voudrait que le formulaire soit automatiquement effacé.

La source

Malheureusement, la fonction a été codée en dur dans wp-login.php aux lignes 913 à 930 (WordPress 4.0). Changer le fichier wp-login.php 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 fonction wp_attempt_focus 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'action login_form car l'action déclenche toujours après le traitement des erreurs , juste avant l'appel JS. Ajoutez le code suivant au functions.php (ou au fichier plugin) de votre thème:

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

Le correctif 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 l'autofocus approprié. Il existe un autre moyen de contourner le problème: mettre en tampon la sortie HTML et la modifier via ob_start , comme inspiré de Geeklab . La mise en 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 cependant.

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();
}
    
réponse donnée Robbert 05.10.2014 - 21:36
0

J'ai eu ce problème aussi. Désactivez le plug-in "WP-SpamShield" de Scott Allen et tout a recommencé à fonctionner.

    
réponse donnée ERM 21.01.2015 - 16:45
0

Mon mot de passe était vide / null, alors j'ai essayé de le remplacer par autre chose, comme "1234". Ajouter de l'espace et le supprimer ne fonctionnaient pas, pas plus que désactiver JS. Nous avons également essayé différents navigateurs, est-ce vraiment le cas uniquement dans Chrome?

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

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

enlace

    
réponse donnée P_95 05.01.2017 - 11:24

Lire d'autres questions sur les étiquettes