Autenticare gli utenti con Zend_Auth - 2

Zend_Auth_Adapter_DbTable

Nel precedente articolo abbiamo analizzato i diversi componenti che concorrono alla realizzazione del sistema di autenticazione utente presente nello Zend Framework. In particolare abbiamo visto come il controllo delle credenziali dell'utente avviene grazie ad una classe detta Adapter. Tra gli Adapter già presenti nello Zend Framework vi è Zend_Auth_Adapter_DbTable che può essere usato per confrontare lo username e la password forniti dall'utente con quelli memorizzati in una tabella di un database.

Per accedere al database lo Zend_Auth_Adapter_DbTable necessita di una connessione al database, ovvero di uno Zend_Db_Adapter, oggetto che deve essere fornito direttamente al costruttore della classe. Gli ulteriori parametri per configurare Zend_Auth_Adapter_DbTable sono:

  • tableName: il nome della tabella del database che contiene username e password di tutti gli utenti, utilizzate per la verifica delle credenziali durante il login.
  • identityColumn: il nome della colonna della tabella del database che contiene l'username degli utenti registrati.
  • credentialColumn: il nome della colonna che contiene la password degli utenti.
  • credentialTreatment: indica un eventuale sistema utilizzato per oscurare le password all'interno del database (crittografica, hash, ecc.). Ad esempio, se in un database MySQL vengono conservati gli hash MD5 delle password bisogna specificare 'MD5(?)'. Si noti che credentialTreatment non fa riferimento ad una funzione PHP bensì ad una funzione del database impiegato.

Lo username e la password da verificare vengono fornite all'Adapter attraverso i metodi setIdentity($username) e setCredential($password). Come per qualsiasi Adapter, il metodo authenticate() effettua il controllo di questi dati e restituisce un oggetto di tipo Zend_Auth_Result che, oltre a contenere l'esito della procedura, contiene anche lo username dell'utente. Se si procede con una autenticazione indiretta (si ricordi quanto detto nel precedente articolo) questa sarà l'unica informazione che Zend_Auth conserverà nello Storage.

Spesso però è conveniente rendere persistenti ulteriori informazioni relative all'utente loggato (ad esempio user_id, data ultimo accesso, nome da mostrare, ecc.) e alcune di queste informazioni risiedono proprio sullo stesso record della tabella utenti utilizzata per l'autenticazione appena effettuata. Per questa ragione Zend_Auth_Adapter_DbTable fornisce il metodo getResultRowObject() per recuperare anche le altre informazioni presenti nel record della tabella utenti. Effettuando una autenticazione indiretta potremo memorizzare tali informazioni nello Storage di Zend_Auth.

getResultRowObject() permette anche di recuperare solo alcune informazioni dal record della tabella. Se ad esempio vogliamo recuperare solo i campi "campo1" e "campo2" bisogna procedere in questo modo:

$my_auth_adapter->getResultRowObject(array('campo1', 'campo2'));

Se invece vogliamo recuperare tutti i campi tranne "campo3" e "campo4":

$my_auth_adapter->getResultRowObject(null, array('campo3', 'campo4'));
Pagine: 12 3 4 5

2 commenti

1 enzo enzo marted́ 30 giugno 2009, ore 23:12
scusate la mia ignoranza, il nome file della template quale dovrebbe essere?
2 Bruno Valenti Bruno Valenti luned́ 18 luglio 2011, ore 14:27
application/view/script/index/index.phtml
Effettua l'accesso o registrati per inserire un commento