Zend Framework

Zend_Auth et Doctrine

Aujourd’hui, je reviens sur l’authentification. Mais attention, au lieu d’utiliser Zend_DB, je vais utiliser Doctrine et ce, grâce à un adaptateur développé à cet effet.

Pour commencer, Téléchargez la classe correspondante via ce lien. Ensuite, placez la dans votre projet afin d’avoir le chemin suivant : /library/App/Auth/Adapter/Doctrine.php.

Ensuite, en reprenant le tutoriel de Doctrine et celui de l’authentification, nous ne devrions pas avoir de mal pour se connecter avec cette classe.

Pour faire court, voici le script final (j’ai laissé les anciennes lignes en commentaires pour que vous puissiez faire la différence. Entre avant et après :

/application/modules/admin/controller/IndexController.php:

public function indexAction() {
    $this->view->title="Authentification utilisateur";

    $form = new Admin_Forms_Identification();
    $this->view->form = $form;
    $this->view->message = null;

    if($this->_request->isPost())
    {
        //on récupère le login
        $username = $this->_request->getPost('login');
        //on récupère le password                       
        $password = $this->_request->getPost('password');                   

        if (empty($username)) 
        {
            $this->view->message = 'Veuillez saisir un identifiant';
        } 
        else
        {
            //on récupère la connexion à la base de donnée
            //$dbAdapter = Zend_Db_Table::getDefaultAdapter();
            //récupération de la connexion à la BDD via la table Utilisateurs et Doctrine
            $dbAdapter = Doctrine::getConnectionByTableName('App_Models_Utilisateurs');
            //récupération de l'adaptateur dbAdapter                
            //$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
            //récupération de l'adaptateur Doctrine. Nous l'initialisons avec la connexion à la BDD
            $authAdapter = new App_Auth_Adapter_Doctrine($dbAdapter);
            //on indique le nom de la table     
            $authAdapter->setTableName('App_Models_Utilisateurs');  
            //on indique la colonne du login                
            $authAdapter->setIdentityColumn('login');
            //on indique la colonne du mot de passe                     
            $authAdapter->setCredentialColumn('passwd');
            //on dit qu les mots de passes sont hashés en MD5
            $authAdapter->setCredentialTreatment('MD5(?)');                 

            //ajout des données du formulaire pour l'authentification
            $authAdapter->setIdentity($username);
            $authAdapter->setCredential($password);

            //lancement de l'authentification
            $auth = Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session('admin')); 
            $result = $auth->authenticate($authAdapter); 

            Zend_Debug::dump($result);
            if ($result->isValid()) 
            {   
                //succès: on stoque dans un objet sessions toutes les infos de la ligne
                //de la table sauf le mot de passe pour des raisons de sécurité.
                $data = $authAdapter->getResultRowObject(null, 'user_password'); 
                $auth->getStorage()->write($data); 

                //on redirige vers notre page admin
                $this->_redirect('/admin/accueil');
            } 
            else 
            {
                //failure: clear database row from session
                $this->view->message = "Echec de l'identification";
            }       
        }
    }
}

Comme vous pouvez le voir, il n’y a pas beaucoup de changement par rapport à avant. En ce qui concerne l’utilisation de la session générée, elle est de la même structure et la déconnexion marche toujours de la même façon.

Voilà, maintenant, vous pouvez supprimer du site-test toutes les allusions à Zend_Db car maintenant, Doctrine domine partout.

Source: ZF Community Framework.