mai
27
2010

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:

 PHP |  copy code |? 
01
public function indexAction() {
02
	$this->view->title="Authentification utilisateur";
03
 
04
	$form = new Admin_Forms_Identification();
05
	$this->view->form = $form;
06
	$this->view->message = null;
07
 
08
	if($this->_request->isPost())
09
	{
10
		//on récupère le login
11
		$username = $this->_request->getPost('login');
12
		//on récupère le password 						
13
		$password = $this->_request->getPost('password');					
14
 
15
 
16
		if (empty($username)) 
17
		{
18
			$this->view->message = 'Veuillez saisir un identifiant';
19
		} 
20
		else
21
		{
22
			//on récupère la connexion à la base de donnée
23
			//$dbAdapter = Zend_Db_Table::getDefaultAdapter();
24
			//récupération de la connexion à la BDD via la table Utilisateurs et Doctrine
25
			$dbAdapter = Doctrine::getConnectionByTableName('App_Models_Utilisateurs');
26
			//récupération de l'adaptateur dbAdapter				
27
			//$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
28
			//récupération de l'adaptateur Doctrine. Nous l'initialisons avec la connexion à la BDD
29
			$authAdapter = new App_Auth_Adapter_Doctrine($dbAdapter);
30
			//on indique le nom de la table		
31
			$authAdapter->setTableName('App_Models_Utilisateurs');	
32
			//on indique la colonne du login				
33
			$authAdapter->setIdentityColumn('login');
34
			//on indique la colonne du mot de passe						
35
			$authAdapter->setCredentialColumn('passwd');
36
			//on dit qu les mots de passes sont hashés en MD5
37
			$authAdapter->setCredentialTreatment('MD5(?)');					
38
 
39
			//ajout des données du formulaire pour l'authentification
40
			$authAdapter->setIdentity($username);
41
			$authAdapter->setCredential($password);
42
 
43
			//lancement de l'authentification
44
			$auth = Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session('admin')); 
45
			$result = $auth->authenticate($authAdapter); 
46
 
47
			Zend_Debug::dump($result);
48
			if ($result->isValid()) 
49
			{
50
 
51
				//succès: on stoque dans un objet sessions toutes les infos de la ligne
52
				//de la table sauf le mot de passe pour des raisons de sécurité.
53
				$data = $authAdapter->getResultRowObject(null, 'user_password'); 
54
    			$auth->getStorage()->write($data); 
55
 
56
 
57
 
58
				//on redirige vers notre page admin
59
				$this->_redirect('/admin/accueil');
60
			} 
61
			else 
62
			{
63
				//failure: clear database row from session
64
				$this->view->message = "Echec de l'identification";
65
			}		
66
		}
67
	}
68
}

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.

Articles Connexes

A propos de l'Auteur: Benjamin Besse

Je suis Analyste Développeur chez Goomeo et je suis passioné par tout ce qui touche aux technologies du Web. J'ai commencé par apprendre l'utilisation du Framework Zend et j'ai continué naturellement via Android. Le tout seulement avec les bases acquises en DUT et Licence professionnelle Informatique.

1 Commentaire Donnez votre avis

  • Le lien du fichier adaptateur ne fonctionne pas.
    SVP pourriez-vous le mettre à jour !

Laisser un commentaire

Mots-Clefs