¿Existe un hook antes de que el usuario sea autenticado?

8 nov 2015, 21:34:13
Vistas: 16.4K
Votos: 8

Estoy buscando un hook que pueda usarse antes de que WP consulte la base de datos para autenticar las credenciales de inicio de sesión del usuario, pero no logro encontrar ninguno. ¿Existe alguno?

Probé con add_filter/action('authenticate', 'customcode', 30, 3), pero parece ejecutarse tan pronto como se solicita la página wp-login.php, en lugar de hacerlo después de que el usuario presiona login y se envía el nombre de usuario/contraseña por POST.

0
Todas las respuestas a la pregunta 2
1

Si miras el código de wp-login.php tanto el caso de login como el caso predeterminado ejecutan wp_signon(). La razón, según me parece, es para manejar los casos en los que un usuario ya tiene una cookie válida para el sitio. Por lo tanto, no creo que haya un hook que se dispare solo al iniciar sesión, pero es bastante fácil compensarlo. El primer hook en esa ruta de inicio de sesión y antes de la autenticación es el action hook wp_authenticate, no authenticate (aunque ese es un hook válido).

function customcode($username, $password ) {
  if (!empty($username) && !empty($password)) {
    // tu código
  }
}
add_action('wp_authenticate', 'customcode', 30, 2);
8 nov 2015 23:11:34
Comentarios

Gracias. Esto también funciona en cierto modo, excepto que cualquier respuesta devuelta por los filtros authenticate termina sobrescribiendo cualquier respuesta devuelta por wp_authenticate, así que no es exactamente lo que estaba buscando - aunque fue solo un error en cómo formulé la pregunta =/

Ken Ken
9 nov 2015 12:55:09
2

Ah, resulta que add_filter/action('authenticate', 'customcode', 30, 3) era lo que estaba buscando...

El problema era que tenía la prioridad demasiado baja, por lo que cualquier respuesta que creaba con mi código personalizado era sobrescrita por los otros filtros.

Así que, al hacer un global $wp_filter['authenticate'] pude ver los siguientes filtros:

20, wp_authenticate_username_password
30, wp_authenticate_cookie
99, wp_authenticate_spam_check

Al cambiar la prioridad a 100 (o superior), pude hacer la sobrescritura y crear la respuesta que quería para manejar las credenciales de inicio de sesión enviadas a través de la página de login.

9 nov 2015 12:38:18
Comentarios

Solo hay dos argumentos para customcode, así que debería ser add_action('authenticate', 'customcode', 30, 2). El 3 es confuso.

Ion Ion
29 nov 2016 15:58:09

authenticate debería ser un filtro, creo, https://codex.wordpress.org/Plugin_API/Filter_Reference/authenticate

Anunay Anunay
25 mar 2018 17:29:47