'El campo de contraseña está vacío' error al usar la función de autocompletar en Chrome

11

Cuando abro la pantalla de inicio de sesión en Chrome, el navegador llena automáticamente el formulario con mi nombre de usuario y contraseña. Sin embargo, cuando presiono el botón Enviar, recibo el siguiente mensaje:

  

ERROR: el campo de contraseña está vacío.

Agregar un espacio a la contraseña autocompletada y eliminarla nuevamente me permite iniciar sesión. ¿Qué está pasando?

    
pregunta Robbert 05.10.2014 - 21:36

3 respuestas

16

La función de JavaScript wp_attempt_focus está causando este problema. La función se activa poco después de cargar la página, borra el formulario y se enfoca en él, lo que obliga a los usuarios a ingresar manualmente su información de inicio de sesión.

Chrome completa el nombre de usuario y la contraseña automáticamente, solo milisegundos antes de que la función JS borre el campo. Chrome no recoge correctamente los cambios, mostrando campos rellenos de color amarillo aunque los campos estén realmente vacíos.

Aunque aprecio la funcionalidad de enfoque automático, no puedo pensar en una buena razón por la que alguien querría que el formulario se borre automáticamente.

La fuente

Lamentablemente, la función ha sido codificada en wp-login.php en las líneas 913-930 (WordPress 4.0). Cambiar el archivo wp-login.php por completo es una mala idea, ya que podría sobrescribirse en cualquier próxima actualización de WordPress. Así que tendremos que recurrir a un poco de 'piratería'.

La solución fácil

Se llama a la función wp_attempt_focus si el formulario no tiene errores. Tenemos suerte: la comprobación de errores se realiza a través de PHP. Esto significa que simplemente podemos evitar que la función se active al simular un error de formulario en el momento adecuado mediante las acciones de WP. Elegí la acción login_form ya que la acción siempre se activa después de el manejo de errores, justo antes de la llamada JS. Agregue el siguiente código al functions.php de su tema (o archivo de complemento):

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

La corrección hackish

La solución anterior evita que la función se dispare por completo, lo que significa que tampoco obtendrás el enfoque automático adecuado. Hay otra forma de evitarlo: almacenar en búfer la salida HTML y modificarla a través de ob_start , inspirado en Geeklab . El almacenamiento en búfer nos permite eliminar partes específicas del código, en este caso, la parte de autoclear d.value = '' . Sin embargo, no olvides vaciar el búfer.

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

También tuve este problema. Desactivó el complemento "WP-SpamShield" de Scott Allen y todo comenzó a funcionar nuevamente.

    
respondido por el ERM 21.01.2015 - 16:45
0

Mi contraseña estaba vacía / nula, así que intenté cambiarla por otra cosa, como "1234". Agregar el espacio y eliminarlo no funcionó, ni tampoco se deshabilitó JS. También probé un navegador diferente, ¿está realmente solo en Chrome?

Lo que hice fue cambiar el hash de contraseña en la base de datos y funcionó. %código%.

en mi caso, la contraseña wp_users.user_pass es como BCrypted: 1234

enlace

    
respondido por el P_95 05.01.2017 - 11:24

Lea otras preguntas en las etiquetas