'Erro no campo Senha está vazio' ao usar o preenchimento automático no Chrome

11

Quando abro a tela de login no Chrome, o navegador preenche automaticamente o formulário com meu nome de usuário e senha. No entanto, quando eu clico no botão enviar, recebo a seguinte mensagem:

  

ERRO: o campo da senha está vazio.

Adicionar um espaço à senha preenchida automaticamente e removê-la novamente permite que eu faça login. O que está acontecendo?

    
por Robbert 05.10.2014 / 21:36

3 respostas

16

A função JavaScript wp_attempt_focus está causando esse problema. A função dispara logo após o carregamento da página, limpa o formulário e se concentra nele, forçando os usuários a inserir manualmente suas informações de login.

O Chrome está preenchendo o nome de usuário e a senha automaticamente, apenas em milissegundos, antes que a função JS limpe o campo. O Chrome não seleciona corretamente as alterações, exibindo campos preenchidos com cores amarelas, mesmo que os campos estejam realmente vazios.

Embora eu aprecie a funcionalidade de autofoco, não consigo pensar em uma boa razão para que alguém queira que o formulário seja automaticamente eliminado.

A fonte

Infelizmente, a função foi codificada em wp-login.php nas linhas 913-930 (WordPress 4.0). Alterar o arquivo wp-login.php é uma má ideia, já que ele pode ser substituído em qualquer atualização do WordPress. Então, vamos ter que recorrer a um pouco de 'hacking'.

A solução fácil

A função wp_attempt_focus é chamada se o formulário não tiver erros. Estamos com sorte - a verificação de erros é feita via PHP. Isso significa que podemos simplesmente impedir que a função seja acionada falsificando um erro de formulário no momento certo usando as ações do WP. Eu escolhi a ação login_form , pois a ação sempre dispara o após tratamento de erros, logo antes da chamada JS. Adicione o seguinte código ao functions.php (ou arquivo de plug-in) do seu tema:

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

A correção rápida

A correção acima evita que a função seja disparada, o que significa que você também não obterá o foco automático adequado. Há outra maneira de contornar isso: armazenar em buffer a saída HTML e modificá-la via ob_start , conforme inspirado em Geeklab . O armazenamento em buffer nos permite remover partes específicas do código - nesse caso, a parte autoclear d.value = '' . Não esqueça de liberar o buffer.

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();
}
    
por Robbert 05.10.2014 / 21:36
0

Eu também tive esse problema. Desliguei o plugin "WP-SpamShield" de Scott Allen e tudo começou a funcionar novamente.

    
por ERM 21.01.2015 / 16:45
0

Minha senha estava vazia / nula, então tentei alterá-la para outra coisa, como "1234". Adicionar o espaço e removê-lo não funcionou nem desativou o JS. Também tentei navegador diferente, então é realmente só no Chrome?

O que eu fiz foi que mudei o hash da senha no banco de dados e funcionou. %código%.

no meu caso, a senha wp_users.user_pass é como BCrypted: 1234

enlace

    
por P_95 05.01.2017 / 11:24