Home» Blog» WordPress come personalizzare il processo di login senza un plugin
Wordpress login

Ci sono delle condizioni particolari dove abbiamo bisogno di rafforzare i controlli sulla schermata di login standard di wordpress, per eseguire questa modifica sconsiglio di modificare i files del core di wordpress in quanto le modifiche vanno sicuramente rifatte dopo un aggiornamento di release, la soluzione migliore è quella di utilizzare dei filtri appositi da configurare sul file function.php del proprio tema e implementare delle funzioni nuove che andranno a completare la visualizzazione e il controllo del form standard.

Per capire come fare non esiste niente di meglio che un esempio, facciamo conto che il nostro obiettivo fosse qualcosa del genere: Cambiare il logo del login con un’immagine personalizzata, aggiungere un campo per immettere un codice RSA a tempo, aggiungere un controllo CAPTCHA, integrare i controlli standard di username e password con i nuovi campi definiti.

Tradotto in immagine dovremo ottenere un risultato simile a quello qui di fianco. Le operazioni che andremo ad eseguire sono le seguenti: Costruire un funzione che aggiunga codice CSS a quello standard per cambiare immagine del logo standard e volendo aggiustare la grandezza del form in base alle proprie esigenze che chiameremo my_login_css(), dopo dovremo definire un’altra funzione per l’aggiunta dei due campi nuovi al form esistente che chiameremo my_login_fields(), per ultimo implementare un codice aggiuntivo di controllo dei nuovi campi che deve essere eseguito insieme alla funzione standard di controllo username e password, qui utilizzeremo un filtro su add_filter(‘authenticate’).

Aggiunta codice CSS: per realizzare questo obiettivo bisogna creare una funzione di echo per il codice CSS nuovo e aggiungere la funzione con add_action(‘login_head’,'my_login_css’);

function my_login_css()
{
  echo '<style type="text/css">'."\n";
  echo '#login { margin:auto; padding:34px 0 0 0; width:376px; } ';
  echo '.login h1 a { background-image:url("url/image.png")'."\n";
  echo '</style>'."\n";
}

add_action('login_head','my_login_css');

Campi aggiuntivi di sicurezza: In questo esempio ho aggiunto un codice generato da chiave a tempo e il widget di google re-captha per il controllo anti bot. Ma potete usare la funzione per aggiungere qualsiasi cosa vi viene in mente come ad esempio una domanda segreta che viene cambiata ad ogni tentativo di login, la visualizzazione dell’indirizzo IP di richiesta etc ect.

function my_login_fields()
{
  echo '<p><label for="keyrsa">Codice chiavetta<br/>';
  echo '<input type="password" name="keyrsa" id="keyrsa" class="input" ';
  echo 'value="" size="20" tabindex="30"/></label></p>';
  echo "codice recaptcha vedi documentazione";
  echo '<br/>';
}

add_action('login_form','my_login_fields');

Eseguire i controlli: Una volta implementato il codice precedente dovreste già vedere il risultato grafico sulla vostra pagina di login, adesso manca la fase più importante quello dei controlli, in questo caso faccio il controllo del captcha, dopo quello del codice RSA  e se il controllo non va a buon fine disattivo la funzione standard successiva del controllo utente e password in quanto diventa inutile se non si passano prima i controlli dei due nuovi campi.

function my_login_check($user,$username,$password)
{
  // Controllo se specificato username e password
  if (empty($username) or empty($password)) return $user;

  if ( !checkCaptca() or !checkRSA() ) {
    $user = new WP_Error('denied','<strong>ERROR</strong>: un testo');
    remove_action('authenticate','wp_authenticate_username_password',20);
  }
  return $user;
}

add_filter('authenticate','my_login_check',10,3);

Ovviamente le funzioni di controllo vanno sviluppate tenendo conto delle soluzioni che volete implementare sia per il primo che per il secondo controllo di sicurezza. In alternativa a re-captcha in internet potete trovare molte librerie che creano un’immagine captcha direttamente dal vostro web server tramite codice script PHP o ASP. Questo esempio non è stato riportato per dare una soluzione di sicurezza ma serve solo a capire le possibilità che possiamo sfruttare implementando i filtri sia di visualizzazione che di controllo per quanto riguarda il login.

Una altra cosa che potete personalizzare sono i messaggi di errore in fase di login, infatti wordpress alcune volte è troppo preciso a dare le informazioni, dice se non esiste un utente o se è sbagliata una password tutte informazioni che possono essere usate per capire i nomi degli utenti presenti nel nostro sito, quindi la cosa migliore è dare un messaggio di errore generico qualsiasi sia il motivo specifico della mancata autorizzazione di accesso.

function my_login_messages($error)
{
  $error = '<strong>ERROR</strong>: Autenticazione di accesso non valida.';
  return $error;
}

add_filter('login_errors','my_login_messages');

Per finire vi elenco qui di seguito anche un piccolissimo codice che vi permette di disabilitare la funzione di richiesta nuova password o password dimenticata ?

function my_login_restrict_password_reset() {
  return false;
}

add_filter('allow_password_reset','my_login_restrict_password_reset');

Leggi anche: WordPress configurazione pannello amministrazione SSL

Autore:
Articoli:
57
Website:
http://startbyzero.com/
Nato a Roma nel 1968, appassionato di informatica da subito con il primo acquisto di un Sinclair ZX Spectrum, programmatore e sistemista su sistemi IBM iSeries, sviluppatore di procedure web con PHP e MySQL, grande utilizzatore e stimatore dei prodotti Google ed Amazon AWS. Attualmente vive in Perù nella città di Lima, da dove porta avanti il suo progetto favorito riguardante il blog multitematico di startbyzero.com.

Condividi

Commenti

Scrivi un tuo commento o qualche consiglio