Zend_Auth è la classe principale del sistema di gestione dell'autenticazione utente dello Zend Framework. In una applicazione può esistere un solo oggetto Zend_Auth, infatti la classe implementa il Singleton pattern. Non è necessario quindi istanziare direttamente questa classe ma, quando se ne ha bisogno, basta usare Zend_Auth::getInstance() per accedere all'unica istanza, anche se nulla vieta di assegnare tale istanza ad una variabile.
Come anticipato lo Zend_Auth non è un componente monolitico ma si affida a due ulteriori classi per realizzare due importanti compiti: la verifica delle credenziali e la persistenza dell'identità dell'utente riconosciuto. La verifica delle credenziali viene realizzata da una classe detta Zend_Auth Adapter. Ciascun Adapter è dedicato ad un particolare meccanismo di autenticazione. Quelli già presenti nello Zend Framework sono:
Se nessuno di questi Adapter fa al caso nostro, possiamo scriverne uno personalizzato, creando una classe che implementi l'interfaccia Zend_Auth_Adapter_Interface.
In generale un Adapter riceve in input le credenziali dell'utente, alcune informazioni per il setup del servizio di autenticazione (ad esempio nome della tabella del DB), e fornisce un metodo authenticate() per verificare l'identità dell'utente.
Indipendentemente dall'Adapter utilizzato, il suo metodo authenticate() restituisce un oggetto di tipo Zend_Auth_Result attraverso il quale è possibile conoscere l'esito dell'operazione, richiamando uno dei seguenti metodi:
isValid() - restituisce true se le credenziali dell'utente sono corrette
getCode() - restituisce un codice (una costante della classe Zend_Auth_Result) che permette di determinare non solo l'esito della validazione ma anche le cause di un eventuale insuccesso. Di seguito i valori possibili:
getIdentity() - restituisce l'identità dell'utente utilizzata dura l'autenticazione. Generalmente si tratta dello username.
getMessages() - restituisce un array di messaggi di errore generati durante il processo di autenticazione.
Lo Zend_Auth Adapter si limita a verificare le credenziali ma non conserva il risultato dell'operazione. La persistenza dell'identità dell'utente riconosciuto viene affidata ad un ulteriore componente, lo Storage di Zend_Auth. Se non specificato diversamente si tratta dello Zend_Auth_Storage_Session, il quale utilizza Zend_Session (che a sua volta di default usa le sessioni di PHP). Anche in questo caso, come per l'Adapter, è possibile realizzare uno Storage personalizzato creando una classe che implementa l'interfaccia Zend_Auth_Storage_Interface. A differenza dello Zend_Auth Adapter che è necessario istanziare esplicitamente nel codice, lo Storage di Zend_Auth viene creato e gestito in maniera trasparente da Zend_Auth per cui nella maggior parte delle situazioni non dovremo preoccuparcene.