Errore "Il campo password è vuoto" quando si utilizza il riempimento automatico in Chrome


10

Quando apro la schermata di accesso su Chrome, il browser compila automaticamente il modulo con il mio nome utente e password. Tuttavia, quando premo il pulsante di invio, ricevo il seguente messaggio:

ERRORE: il campo password è vuoto.

Aggiungere uno spazio alla password compilata automaticamente e rimuoverla di nuovo mi consente di accedere. Cosa sta succedendo?

Risposte:


15

La funzione JavaScript wp_attempt_focussta causando questo problema. La funzione si attiva poco dopo il caricamento della pagina, cancella il modulo e si concentra su di esso, costringendo gli utenti a inserire manualmente le informazioni di accesso.

Chrome inserisce automaticamente il nome utente e la password, pochi millisecondi prima che la funzione JS cancelli il campo. Chrome non rileva correttamente le modifiche, visualizzando i campi compilati di colore giallo anche se i campi sono effettivamente vuoti.

Anche se apprezzo la funzionalità di messa a fuoco automatica, non riesco a pensare a una buona ragione per cui qualcuno vorrebbe che il modulo venisse cancellato automaticamente.

La fonte

Purtroppo, la funzione è stata codificata wp-login.phpnelle righe 913-930 (WordPress 4.0). Cambiare del wp-login.phptutto il file è una cattiva idea, poiché potrebbe essere sovrascritto in qualsiasi aggiornamento di WordPress in arrivo. Quindi dovremo ricorrere a un po 'di "hacking".

La soluzione semplice

La wp_attempt_focusfunzione viene chiamata se il modulo non presenta errori. Siamo fortunati: il controllo degli errori viene eseguito tramite PHP. Ciò significa che possiamo semplicemente impedire l'attivazione della funzione falsificando un errore di modulo al momento giusto utilizzando le azioni WP. Ho scelto l' login_formazione poiché l'azione si attiva sempre dopo la gestione degli errori, subito prima della chiamata JS. Aggiungi il seguente codice al tuo tema functions.php(o file plugin):

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

La correzione hackish

La correzione di cui sopra impedisce che la funzione si attivi del tutto, il che significa che non otterrai neanche l'autofocus corretto. C'è un altro modo ob_startper aggirarlo : buffering dell'output HTML e modifica tramite , come ispirato da Geeklab . Il buffering ci consente di rimuovere specifiche porzioni di codice - in questo caso, la parte automatica d.value = ''. Non dimenticare di svuotare il buffer però.

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
Eccezionale. Una correzione per questo dovrebbe essere applicata al core. Ho ricevuto molti commenti dagli utenti che hanno problemi con questo. Grazie per aver condiviso la correzione.
Christine Cooper

Grazie per la soluzione Pensa anche che questo non dovrebbe essere nel nocciolo.
ThiagoPonte,

0

Ho avuto anche questo problema. Disattivato il plug-in "WP-SpamShield" di Scott Allen e tutto ha ripreso a funzionare.


0

La mia password era vuota / nulla quindi ho provato a cambiarla in qualcos'altro, come "1234". L'aggiunta dello spazio e la sua rimozione non funzionavano, né disabilitava JS. Ho anche provato browser diversi, quindi è davvero solo in Chrome?

Quello che ho fatto è che ho cambiato l'hash della password nel database e ha funzionato. wp_users.user_pass.

nel mio caso la password 1234è come BCrypted:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

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

Immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.