Esiste un hook prima che l'utente venga autenticato?

8 nov 2015, 21:34:13
Visualizzazioni: 16.4K
Voti: 8

Sto cercando un hook che possa essere utilizzato prima che WP legga il database per autenticare le credenziali di accesso dell'utente, ma non sembro trovarne da nessuna parte. Ne esiste uno?

Ho provato add_filter/action('authenticate', 'customcode', 30, 3), ma questo sembra eseguirsi non appena viene richiesta la pagina wp-login.php, piuttosto che dopo che l'utente preme il pulsante di login e i dati username/password vengono inviati tramite POST.

0
Tutte le risposte alla domanda 2
1

Se osservi il codice di wp-login.php sia il caso login che quello predefinito eseguono wp_signon(). Il motivo, a quanto pare, è gestire i casi in cui un utente ha già un cookie valido per il sito. Quindi non credo esista un hook che si attivi solo al login, ma è abbastanza facile compensare. Il primo hook lungo quel percorso di login e prima dell'autenticazione è l'action hook wp_authenticate, non authenticate (sebbene anche quest'ultimo sia un hook valido).

function customcode($username, $password ) {
  if (!empty($username) && !empty($password)) {
    // tuo codice
  }
}
add_action('wp_authenticate', 'customcode', 30, 2);
8 nov 2015 23:11:34
Commenti

Grazie. Questo approccio funziona più o meno, tranne per il fatto che qualsiasi risposta restituita dai filtri authenticate finisce per sovrascrivere quelle restituite da wp_authenticate, quindi non è esattamente quello che cercavo - è colpa mia per aver formulato male la domanda però =/

Ken Ken
9 nov 2015 12:55:09
2

Ah, sembra che add_filter/action('authenticate', 'customcode', 30, 3) fosse quello che stavo cercando...

Il problema era che avevo la priorità troppo bassa, quindi qualsiasi risposta creata con il mio codice personalizzato veniva sovrascritta dagli altri filtri.

Dunque, esaminando global $wp_filter['authenticate'] ho potuto vedere i seguenti filtri:

20, wp_authenticate_username_password
30, wp_authenticate_cookie
99, wp_authenticate_spam_check

Modificando la priorità a 100 (o superiore), ho potuto effettuare l'override e creare la risposta desiderata per gestire le credenziali di accesso inviate tramite la pagina di login.

9 nov 2015 12:38:18
Commenti

Ci sono solo due argomenti per customcode quindi dovrebbe essere add_action('authenticate', 'customcode', 30, 2). Il 3 è confondente.

Ion Ion
29 nov 2016 15:58:09

authenticate dovrebbe essere un filtro, credo, https://codex.wordpress.org/Plugin_API/Filter_Reference/authenticate

Anunay Anunay
25 mar 2018 17:29:47