it-swarm-pt.tech

O campo "Senha está vazia" ao usar o preenchimento automático no Chrome

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 o login. O que está acontecendo?

11
Robbert

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 em amarelo, 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 limpo.

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á idéia, 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 correçã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 evitar que a função seja acionada falsificando um erro de formulário no momento certo usando ações WP. Eu escolhi a ação login_form porque a ação sempre dispara after error handling, logo antes da chamada JS. Adicione o seguinte código ao functions.php do seu tema (ou arquivo de plug-in):

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

A correção hackea

A correção acima evita que a função seja disparada, o que significa que você também não obterá o autofoco 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();
}
16
Robbert

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

0
ERM

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 eu mudei o hash da senha no banco de dados e funcionou. wp_users.user_pass.

no meu caso, a senha 1234 é como BCrypted: $2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

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

 image 

0
P_95