<?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>Itanea le Blog &#187; mvc</title>
	<atom:link href="http://www.itanea.com/blog/tag/mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itanea.com/blog</link>
	<description>Techno, Développement, Entreprendre et au-delà !</description>
	<lastBuildDate>Thu, 18 Feb 2010 22:33:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Login et authentification avec le Zend Framework</title>
		<link>http://www.itanea.com/blog/2008/05/04/login-et-authentification-avec-le-zend-framework/</link>
		<comments>http://www.itanea.com/blog/2008/05/04/login-et-authentification-avec-le-zend-framework/#comments</comments>
		<pubDate>Sun, 04 May 2008 00:47:48 +0000</pubDate>
		<dc:creator>Fred Blanc</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authentification]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[logout]]></category>
		<category><![CDATA[matthew]]></category>
		<category><![CDATA[matthiew weier o'phinney]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[objet]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[weier o'phinney]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend_Auth]]></category>
		<category><![CDATA[Zend_Form]]></category>

		<guid isPermaLink="false">http://blog.itanea.com/?p=253</guid>
		<description><![CDATA[Vous pouvez retrouver l&#8217;article original de Matthiew Weier O&#8217;Phinney à l&#8217;adresse suivante sur le site de Matthiew J&#8217;ai reçu un certain nombre de questions de personnes voulant savoir comment utiliser l&#8217;authentification et la persistance d&#8217;identité dans le Zend Framework. La question récurrente est de savoir comment combiner : un adapteur d&#8217;authentification un formulaire de login [...]]]></description>
			<content:encoded><![CDATA[<address class="important">Vous pouvez retrouver l&#8217;article original de <a href="http://weierophinney.net/matthew/resume" target="_blank">Matthiew Weier O&#8217;Phinney</a> à l&#8217;adresse suivante sur le site de <a href="http://weierophinney.net/matthew/archives/165-Login-and-Authentication-with-Zend-Framework.html" target="_blank">Matthiew</a></address>
<p><span class="serendipity_entryIcon">J&#8217;ai reçu un certain nombre de questions de personnes voulant savoir comment utiliser l&#8217;authentification et la persistance d&#8217;identité dans le Zend Framework. La question récurrente est de savoir comment combiner :<br />
</span></p>
<ul>
<li>un adapteur d&#8217;authentification</li>
<li>un formulaire de login</li>
<li>un controlleur pour les actions de login/logout</li>
<li>la vérification de l&#8217;authentification d&#8217;un utilisateur déjà authentifié lors de ses requêtes suivantes</li>
</ul>
<p>Ce n&#8217;est pas insurmontable, mais cela demande de savoir comment les différents éléments du modèle MVC travaillent ensemble, et comment utiliser le composant Zend_Auth. Jetons un coup d&#8217;oeil.</p>
<p><span id="more-253"></span></p>
<h2>Adaptateur d&#8217;authentification</h2>
<p>Pour cette partie, vous aurez besoin d&#8217;un <a href="http://framework.zend.com/manual/fr/zend.auth.html#zend.auth.introduction.adapters" target="_blank">adaptateur d&#8217;authentification</a>. Je ne rentrerai pas dans les détails d&#8217;utilisation de ce composant, car la documentation couvre parfaitement son fonctionnement et vos besoins peuvent varier en fonction de votre site. Je supposerai toutefois, que votre adaptateur d&#8217;authentification demande un login et un mode de passe comme identifiants. Notre contrôleur d&#8217;identification se servira de l&#8217;adaptateur, mais aura simplement un emplacement réservé pour le retrouver.</p>
<h2>Formulaire d&#8217;authentification</h2>
<p>Le formulaire d&#8217;authentification a proprement parler est vraiment simple. Vous pouvez ajouter quelques règles basiques de validation afin de prévenir toute attaque de la base de données ou d&#8217;un autre élément, mais penser à garder l&#8217;ensemble relativement simple. Pour les besoins de ce tutoriel, nous allons définir les critères suivants :</p>
<ul>
<li>le nom d&#8217;utilisateur doit se composer uniquement de caractère alphabétique, et doit contenir entre 3 et 20 caractères</li>
<li>le mot de passe sera constitué uniquement de caractères alphanumériques,  et doit contenir entre 6 et 20 caractères</li>
</ul>
<p>Le code du formulaire ressemblera à ceci :</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginForm extends Zend_Form<br />
<span style="color: #66cc66;">{</span><br />
public <span style="font-weight: 700; color: #000000;">function</span> init<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$username</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">addElement</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;text&#8217;</span>, <span style="color: #ff0000;">&#8216;username&#8217;</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;filters&#8217;</span> =&gt; <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;StringTrim&#8217;</span>, <span style="color: #ff0000;">&#8216;StringToLower&#8217;</span><span style="color: #66cc66;">)</span>,<br />
<span style="color: #ff0000;">&#8216;validators&#8217;</span> =&gt; <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;Alpha&#8217;</span>,<br />
<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;StringLength&#8217;</span>, <span style="font-weight: 700; color: #000000;">false</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>,<br />
<span style="color: #66cc66;">)</span>,<br />
<span style="color: #ff0000;">&#8216;required&#8217;</span> =&gt; <span style="font-weight: 700; color: #000000;">true</span>,<br />
<span style="color: #ff0000;">&#8216;label&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;Your username:&#8217;</span>,<br />
<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;</p>
<p><span style="color: #0000ff;">$password</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">addElement</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;password&#8217;</span>, <span style="color: #ff0000;">&#8216;password&#8217;</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;filters&#8217;</span> =&gt; <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;StringTrim&#8217;</span><span style="color: #66cc66;">)</span>,<br />
<span style="color: #ff0000;">&#8216;validators&#8217;</span> =&gt; <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;Alnum&#8217;</span>,<br />
<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;StringLength&#8217;</span>, <span style="font-weight: 700; color: #000000;">false</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #cc66cc;">6</span>, <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>,<br />
<span style="color: #66cc66;">)</span>,<br />
<span style="color: #ff0000;">&#8216;required&#8217;</span> =&gt; <span style="font-weight: 700; color: #000000;">true</span>,<br />
<span style="color: #ff0000;">&#8216;label&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;Password:&#8217;</span>,<br />
<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;</p>
<p><span style="color: #0000ff;">$login</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">addElement</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;submit&#8217;</span>, <span style="color: #ff0000;">&#8216;login&#8217;</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;required&#8217;</span> =&gt; <span style="font-weight: 700; color: #000000;">false</span>,<br />
<span style="color: #ff0000;">&#8216;ignore&#8217;</span> =&gt; <span style="font-weight: 700; color: #000000;">true</span>,<br />
<span style="color: #ff0000;">&#8216;label&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;Login&#8217;</span>,<br />
<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;</p>
<p><span style="font-style: italic; color: #808080;">// Nous souhaitons afficher un message&#8217;failed authentication&#8217; si nécessaire;</span><br />
<span style="font-style: italic; color: #808080;">// nous le ferons avec le champs &#8216;description&#8217;, nous avons donc besoin</span><br />
<span style="font-style: italic; color: #808080;">// d&#8217;ajouter decorator.</span><br />
<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">setDecorators</span><span style="color: #66cc66;">(</span><a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;FormElements&#8217;</span>,<br />
<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;HtmlTag&#8217;</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;tag&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;dl&#8217;</span>, <span style="color: #ff0000;">&#8216;class&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;zend_form&#8217;</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>,<br />
<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;Description&#8217;</span>, <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;placement&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;prepend&#8217;</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>,<br />
<span style="color: #ff0000;">&#8216;Form&#8217;</span><br />
<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<h2>Login Controller</h2>
<p>Maintenant, nous allons créer un contrôleur pour gérer les actions de login et de logout. Le cas d&#8217;utilisation typique serait :</p>
<ul>
<li>l&#8217;utilisateur clique sur le lien du formulaire d&#8217;authentification</li>
<li>l&#8217;utilisateur soumet le formulaire</li>
<li>le contrôleur traite le formulaire
<ul>
<li>une erreur de validation provoque l&#8217;affichage du formulaire avec le ou les messages d&#8217;erreurs</li>
<li>une identification correcte redirige vers la page d&#8217;accueil</li>
</ul>
</li>
<li>l&#8217;utilisateur connecté est redirigé vers la page d&#8217;accueil</li>
<li>l&#8217;action logout déconnecte l&#8217;utilisateur et le redirige vers le formulaire de login</li>
</ul>
<p>Le LoginController se servira aussi bien de l&#8217;adaptateur d&#8217;authentification que vous avez choisi, que du formulaire d&#8217;authentification. Nous passerons au constructeur du formulaire de login l&#8217;action et la méthode de formulaire (puisque nous savons maintenant ce qu&#8217;ils font pour cette usage du formulaire).<br />
Lorsque nous aurons des valeurs valides, nous les passerons à notre adaptateur d&#8217;authentification.</p>
<p>Allons y, créons le contrôleur. En premier, nous allons créer les accesseurs pour le formulaire et l&#8217;adaptateur d&#8217;authentification.</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginController extends Zend_Controller_Action<br />
<span style="color: #66cc66;">{</span><br />
public <span style="font-weight: 700; color: #000000;">function</span> getForm<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #b1b100;">return</span> <span style="font-weight: 700; color: #000000;">new</span> LoginForm<span style="color: #66cc66;">(</span><a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">(</span><br />
<span style="color: #ff0000;">&#8216;action&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;/login/process&#8217;</span>,<br />
<span style="color: #ff0000;">&#8216;method&#8217;</span> =&gt; <span style="color: #ff0000;">&#8216;post&#8217;</span>,<br />
<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> getAuthAdapter<span style="color: #66cc66;">(</span><a href="http://www.php.net/array"><span style="color: #000066;">array</span></a> <span style="color: #0000ff;">$params</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// Laissé au soin du développeur&#8230;</span><br />
<span style="font-style: italic; color: #808080;">// Suppose que le constructeur prend un tableau de</span><br />
<span style="font-style: italic; color: #808080;">// paramètres qu&#8217;il utilise comme identifiant afin de vérifier l&#8217;identité.</span><br />
<span style="font-style: italic; color: #808080;">// B</span><span style="font-style: italic; color: #808080;">ien sur, n</span><span style="font-style: italic; color: #808080;">otre formulaire passera seulement les paramètres &#8216;nom d&#8217;utilisateur&#8217;</span><br />
<span style="font-style: italic; color: #808080;">// et &#8216;mot de passe&#8217;.</span><br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<p>Ensuite, nous avons besoin d&#8217;effectuer quelques vérifications, avant de dispatcher une quelconque action, afin de s&#8217;assurer :</p>
<ul>
<li>que si un utilisateur est déjà authentifié, mais n&#8217;a pas effectué d&#8217;action de déconnexion, il sera redirigé vers la page d&#8217;accueil</li>
<li>que si l&#8217;utilisateur n&#8217;est pas authentifié, mais a soumis une requête pour se déconnecter, nous devons le redirigé vers la page de login</li>
</ul>
<p>La routine preDispatch() ci-dessous effectuera cela pour nous:</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginController extends Zend_Controller_Action<br />
<span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// &#8230;</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> preDispatch<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span>Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">hasIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// Si l&#8217;utilisateur est identifié, nous ne souhaitons pas voir le formulaire d&#8217;authentification;</span><br />
<span style="font-style: italic; color: #808080;">// cependant, l&#8217;action de déconnexion devrait toujours rester disponible.</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;logout&#8217;</span> != <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getRequest</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">getActionName</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$this</span>-&gt;_helper-&gt;<span style="color: #006600;">redirector</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span>, <span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// If they aren&#8217;t, they can&#8217;t logout, so that action should </span><br />
<span style="font-style: italic; color: #808080;">// redirect to the login form</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;logout&#8217;</span> == <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getRequest</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">getActionName</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$this</span>-&gt;_helper-&gt;<span style="color: #006600;">redirector</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<p>Maintenant, nous devons réaliser notre formulaire de login. Ce sera notre méthode la plus simple &#8212; il suffit de récupérer le formulaire et de l&#8217;assigner à la vue:</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginController extends Zend_Controller_Action<br />
<span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// &#8230;</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> indexAction<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">view</span>-&gt;<span style="color: #006600;">form</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getForm</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<p>Le traitement du formulaire implique légèrement plus de logique. Nous devons vérifier qu&#8217;il provient bien d&#8217;une requête POST, que son contenu est valide et enfin que les paramètres d&#8217;authentification soient corrects.</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginController extends Zend_Controller_Action<br />
<span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// &#8230;</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> processAction<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$request</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getRequest</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;</p>
<p><span style="font-style: italic; color: #808080;">// Vérifier que nous avons bien à faire à une requête POST</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span>!<span style="color: #0000ff;">$request</span>-&gt;<span style="color: #006600;">isPost</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$this</span>-&gt;_helper-&gt;<span style="color: #006600;">redirector</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span></p>
<p><span style="font-style: italic; color: #808080;">// Récupérons le formulaire et validons le</span><br />
<span style="color: #0000ff;">$form</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getForm</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span>!<span style="color: #0000ff;">$form</span>-&gt;<span style="color: #006600;">isValid</span><span style="color: #66cc66;">(</span><span style="color: #0000ff;">$request</span>-&gt;<span style="color: #006600;">getPost</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// Entrées invalides</span><br />
<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">view</span>-&gt;<span style="color: #006600;">form</span> = <span style="color: #0000ff;">$form</span>;<br />
<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">render</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>; <span style="font-style: italic; color: #808080;">// rechargeons le formulaire</span><br />
<span style="color: #66cc66;">}</span></p>
<p><span style="font-style: italic; color: #808080;">// Récupérons notre adaptateur d&#8217;authentification et vérifions les identifiants</span><br />
<span style="color: #0000ff;">$adapter</span> = <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">getAuthAdapter</span><span style="color: #66cc66;">(</span><span style="color: #0000ff;">$form</span>-&gt;<span style="color: #006600;">getValues</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #0000ff;">$auth</span> = Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #0000ff;">$result</span> = <span style="color: #0000ff;">$auth</span>-&gt;<span style="color: #006600;">authenticate</span><span style="color: #66cc66;">(</span><span style="color: #0000ff;">$adapter</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span>!<span style="color: #0000ff;">$result</span>-&gt;<span style="color: #006600;">isValid</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// Identifiants invalides</span><br />
<span style="color: #0000ff;">$form</span>-&gt;<span style="color: #006600;">setDescription</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;Invalid credentials provided&#8217;</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">view</span>-&gt;<span style="color: #006600;">form</span> = <span style="color: #0000ff;">$form</span>;<br />
<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">render</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>; <span style="font-style: italic; color: #808080;">// </span><span style="font-style: italic; color: #808080;">rechargeons le formulaire</span><br />
<span style="color: #66cc66;">}</span></p>
<p><span style="font-style: italic; color: #808080;">// Nous sommes authentifiés, redirection vers la page d&#8217;accueil</span><br />
<span style="color: #0000ff;">$this</span>-&gt;_helper-&gt;<span style="color: #006600;">redirector</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span>, <span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<p>Finalement, nous pouvons aborder l&#8217;action de logout. C&#8217;est presque aussi simple que l&#8217;affichage du formulaire d&#8217;authentification; nous devons simplement effacer l&#8217;identité de l&#8217;utilisateur de l&#8217;objet d&#8217;authentification et rediriger:</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">class</span> LoginController extends Zend_Controller_Action<br />
<span style="color: #66cc66;">{</span><br />
<span style="font-style: italic; color: #808080;">// &#8230;</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> logoutAction<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">clearIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #0000ff;">$this</span>-&gt;_helper-&gt;<span style="color: #006600;">redirector</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;index&#8217;</span><span style="color: #66cc66;">)</span>; <span style="font-style: italic; color: #808080;">// Retournez à la page de login</span><br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<p>Ok, nous venons de mettre en place les routines de login/logout. Jetons un œil à la seule vue associée que nous ayons, le formulaire:</p>
<div class="php" style="text-align: left;"><span style="font-weight: 700; color: #000000;">&lt;?</span> <span style="font-style: italic; color: #808080;">// login/index.phtml ?&gt;</span><br />
&lt;h2&gt;Please Login&lt;/h2&gt;<br />
<span style="font-weight: 700; color: #000000;">&lt;?</span>= <span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">form</span> <span style="font-weight: 700; color: #000000;">?&gt;</span></div>
<p>Voilà c&#8217;est tout. Le composant Zend_Form permet vraiment d&#8217;avoir des scripts de vues simples. <img class="emoticon" style="display: inline; vertical-align: bottom;" src="http://weierophinney.net/matthew/templates/matthew/img/emoticons/smile.png" alt=":-)" /></p>
<h2>Vérifications pour utilisateurs authentifiés</h2>
<p>La dernière chose à voir est : comment puis je déterminer qu&#8217;un utilisateur est authentifié, et restreindre son accès s&#8217;il ne l&#8217;est pas ?</p>
<p>Si vous regarder attentivement la méthode preDispatch() vue plus haut, vous remarquerez que cela est peut être déjà fait. Zend_Auth rend persistante l&#8217;identité dans la session, ce qui vous permet de la vérifier directement en utilisant la construction suivante:</p>
<div class="php" style="text-align: left;">Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">hasIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span></div>
<p>Vous pouvez vous en servir pour déterminer si l&#8217;utilisateur est authentifié, et dans le cas contraire rediriger l&#8217;utilisateur vers la page de login avec l&#8217;aide du redirector. Vous pouvez récupérer l&#8217;identité depuis l&#8217;objet auth de la manière suivante:</p>
<div class="php" style="text-align: left;"><span style="color: #0000ff;">$identity</span> = Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">getIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;</div>
<p>Cela pourrait être utilisé dans un helper afin de montrer le statut de connexion dans le template, par exemple:</p>
<div class="php" style="text-align: left;"><span style="font-style: italic; color: #808080;">/**<br />
* ProfileLink helper<br />
*<br />
* Call as $this-&gt;profileLink() in your layout script<br />
*/</span><br />
<span style="font-weight: 700; color: #000000;">class</span> My_View_Helper_ProfileLink<br />
<span style="color: #66cc66;">{</span><br />
public <span style="color: #0000ff;">$view</span>;</p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> setView<span style="color: #66cc66;">(</span>Zend_View_Interface <span style="color: #0000ff;">$view</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">view</span> = <span style="color: #0000ff;">$view</span>;<br />
<span style="color: #66cc66;">}</span></p>
<p>public <span style="font-weight: 700; color: #000000;">function</span> profileLink<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$auth</span> = Zend_Auth::<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span><span style="color: #0000ff;">$auth</span>-&gt;<span style="color: #006600;">hasIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span><br />
<span style="color: #0000ff;">$username</span> = <span style="color: #0000ff;">$auth</span>-&gt;<span style="color: #006600;">getIdentity</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>-&gt;<span style="color: #006600;">username</span>;<br />
<span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&#8216;&lt;a href=&nbsp;&raquo;/profile&#8217;</span> . <span style="color: #0000ff;">$username</span> . <span style="color: #ff0000;">&#8216;&nbsp;&raquo;&gt;Welcome, &#8216;</span> . <span style="color: #0000ff;">$username</span> .  <span style="color: #ff0000;">&#8216;&lt;/a&gt;&#8217;</span>;<br />
<span style="color: #66cc66;">}</span></p>
<p><span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&#8216;&lt;a href=&nbsp;&raquo;/login&nbsp;&raquo;&gt;Login&lt;/a&gt;&#8217;</span>;<br />
<span style="color: #66cc66;">}</span><br />
<span style="color: #66cc66;">}</span></p>
</div>
<h2>Conclusion</h2>
<p>Zend_Auth réalise la plupart du travail en arrière plan pour faire de la persistance d&#8217;identité dans la session une banalité. Combinez-le avec Zend_Form, et vous aurez une solution très facile à mettre en œuvre pour retrouver et valider des identifiants; ajoutez à cela les évènements dans le composant Zend_Controller pour filtrer les actions avant de les rediriger, et vous pouvez restreindre très facilement l&#8217;accès aux applications en utilisant le statut d&#8217;authentification.</p>
<p><strong>Nota :</strong> <em>Cette traduction est livrée telle quelle, si toutefois vous constatez une erreur de traduction, je suis bien sur ouvert à toute correction.</em></p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://www.itanea.com/blog/2007/02/04/ubuntips-arreter-des-programmes-bloques/" rel="bookmark" class="crp_title">UbunTips : Arrêter des programmes bloqués</a></li><li><a href="http://www.itanea.com/blog/2008/11/27/zend-framework-utiliser-zend-framework-et-doctrine-auteur-ruben-vermeersch-traduction-fred-blanc/" rel="bookmark" class="crp_title">Zend framework : Utiliser Zend Framework et Doctrine (Auteur Ruben Vermeersch, Traduction Fred Blanc)</a></li><li><a href="http://www.itanea.com/blog/2009/11/24/zend-framework-la-1-9-6-pointe-le-bout-du-nez/" rel="bookmark" class="crp_title">Zend Framework : la 1.9.6 pointe le bout du nez ?</a></li><li><a href="http://www.itanea.com/blog/2007/01/30/realiser-des-screencasts-sous-ubuntu/" rel="bookmark" class="crp_title">UbunTips : Réaliser des screencasts sous Ubuntu</a></li><li><a href="http://www.itanea.com/blog/2008/03/17/sortie-du-zend-framework-v15-finale/" rel="bookmark" class="crp_title">Sortie du Zend Framework v1.5 finale</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.itanea.com/blog/2008/05/04/login-et-authentification-avec-le-zend-framework/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
