<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yriase &#187; auth</title>
	<atom:link href="http://www.yriase.fr/tag/auth/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yriase.fr</link>
	<description>Actu, Développement, Tutoriaux, Geek ...</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:33:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Zend Framework : Authentification avec Zend_Auth_Adapter_DbTable</title>
		<link>http://www.yriase.fr/565-zend-framework-authentification-avec-zend_auth_adapter_dbtable.html</link>
		<comments>http://www.yriase.fr/565-zend-framework-authentification-avec-zend_auth_adapter_dbtable.html#comments</comments>
		<pubDate>Wed, 27 Jan 2010 21:51:47 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend_auth]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=565</guid>
		<description><![CDATA[Aujourd&#8217;hui je vais expliquer comment réaliser simplement avec le Zend Framework une authentification avec la classe Zend_Auth_Adapter_DbTable. Cette classe va grandement nous simplifier la vie puisqu&#8217;elle va comparer pour nous le couple username/password dans une table dont on lui fournira les champs. Autrement dit, plus besoin de s&#8217;embêter à sélectionner et comparer les valeurs à [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui je vais expliquer comment réaliser simplement avec le Zend Framework une authentification avec la classe Zend_Auth_Adapter_DbTable.</p>
<p>Cette classe va grandement nous simplifier la vie puisqu&#8217;elle va comparer pour nous le couple username/password dans une table dont on lui fournira les champs.<br />
Autrement dit, plus besoin de s&#8217;embêter à sélectionner et comparer les valeurs à la main.</p>
<p>Pour commencer nous allons créer notre model pour la table qui stocke nos utilisateurs. Imaginons qu&#8217;elle s&#8217;appelle &#8216;<em>users</em>&#8216;.</p>
<pre class="brush: php">
&lt;?php 

class Default_Model_DbTable_Users extends Zend_Db_Table
{
    protected $_name = 'users';

}
</pre>
<p>La classe est ici déclarée sans autres méthodes pour l&#8217;exemple mis vous pouvez très bien en ajouter. De plus j&#8217;ai nommé ma classe de telle sorte qu&#8217;elle est déclarée dans le fichier : &#8216;<em>application/models/DbTable/Users.php</em>&#8216;. Libre à vous de faire autrement.</p>
<p>Ensuite vous pouvez créer un formulaire en héritant la classe Zend_Form :</p>
<pre class="brush: php">
&lt;?php

class Default_Form_Login extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('login_form');
        $this->setAction('/auth/login')
     	->setMethod('post');

        $login = new Zend_Form_Element_Text('login');
        $login->setLabel('Login : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Mot de passe : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        $submit = new Zend_Form_Element_Submit('Login');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setValue('Login');

        $this->addElements(array($login, $password, $submit));
    }
}
</pre>
<p>De même, j&#8217;ai ici fait au plus simple. La classe est déclarée dans le fichier &#8216;<em>application/forms/Login.php</em>&#8216;.<br />
Il ne vous reste plus qu&#8217;a déclarer le formulaire dans le contrôleur gérant l&#8217;authentification. Par exemple : </p>
<pre class="brush: php">
&lt;?php

class AuthController extends Zend_Controller_Action
{

    public function init()
    {
        $this->initView();
	$this->view->baseUrl = $this->_request->getBaseUrl();
    }

    public function loginAction()
    {
    	$this->view->title="Mon Site Web - Login";
        $form =  new Default_Form_Login();
        $this->view->form = $form;
    }

}
</pre>
<p>On affiche le formulaire dans notre fichier vue :</p>
<pre class="brush: php">

&lt;?php
    echo $this->form;
    echo '&lt;br /&gt;';
    echo $this->error;
?&gt;
</pre>
<p>Voilà tout est en place pour nous permettre maintenant d&#8217;utiliser Zend_Auth_Adapter_DbTable.<br />
On va donc ajouter dans l&#8217;action login de notre contrôleur : </p>
<pre class="brush: php">

    public function loginAction()
    {
        // Si l'utilisateur est déjà loggué on le redirige à l'accueil
    	if(Zend_Auth::getInstance()->hasIdentity()) $this->_redirect('/index');

    	$this->view->title="Mon Site Web - Login";

		$form = new Default_Form_Login();
		$this->view->form = $form;
                $formData = $_POST;

		if($this->getRequest()->isPost()) {
	            if ($form->isValid($formData)) {
					$f = new Zend_Filter_StripTags();
					$username = $f->filter($form->getValue('login'));
					$password = $f->filter($form->getValue('password'));

					$dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter();
					$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
					$authAdapter->setTableName('users');
					$authAdapter->setIdentityColumn('username');
					$authAdapter->setCredentialColumn('password');

					// On assigne les valeurs pour que l'authentification s'effectue
					$authAdapter->setIdentity($username);
					$authAdapter->setCredential(sha1($password)); // On a pris la précaution d'au moins chiffrer les mdp

					// On tente l'authentification
					$auth = Zend_Auth::getInstance();
					$result = $auth->authenticate($authAdapter);
                         // On test si tout s'est bien passé
	                if($result->isValid())
	                	{
	                		$data = $authAdapter->getResultRowObject(null, 'password');
					$auth->getStorage()->write($data);
					$this->_redirect('/admin');
	                	}
	                	else
	                	{
	                	$this->view->error = 'Mauvais login ou mauvais mot de passe.';
                    		$form->populate($formData);
	                	}
				    }
		    	else {
	                $this->view->error = 'Vous devez remplir tous les champs.';
                        $form->populate($formData);
		    	}
		}
    }
</pre>
<p>Et voilà ZF a automatiquement géré l&#8217;authentification pour nous. On peut maintenant accéder au données de l&#8217;utilisateur via Zend_Auth::getInstance()->getIdentity().<br />
Ainsi si on veut afficher le nom de l&#8217;utilisateur : </p>
<pre class="brush: php">
&lt;?php
     $auth = Zend_Auth::getInstance()->getIdentity();
     echo $auth->username;
?&gt;
</pre>
<p>Et voilà, bientôt de nouveaux articles sur l&#8217;utilisation du Zend Framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/565-zend-framework-authentification-avec-zend_auth_adapter_dbtable.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

