<?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>Luizz &#187; auth</title>
	<atom:link href="http://www.luizz.it/tag/auth/feed" rel="self" type="application/rss+xml" />
	<link>http://www.luizz.it</link>
	<description>Appunti di lavoro per lo sviluppo di applicazioni WEB con CakePHP</description>
	<lastBuildDate>Thu, 05 Jan 2012 08:48:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ancora su Auth component</title>
		<link>http://www.luizz.it/87/cakephp/ancora-su-auth-component</link>
		<comments>http://www.luizz.it/87/cakephp/ancora-su-auth-component#comments</comments>
		<pubDate>Tue, 03 Jun 2008 07:49:12 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[auth]]></category>

		<guid isPermaLink="false">http://www.luizz.it/?p=87</guid>
		<description><![CDATA[A completamento degli appunti sul component Auth voglio segnalare una serie di tutorial interessanti su Web Developement 2.0 http://www.webdevelopment2.com/cakephp-auth-component-tutorial-1/ http://www.webdevelopment2.com/cakephp-auth-component-tutorial-2/ http://www.webdevelopment2.com/cakephp-auth-component-tutorial-3/]]></description>
			<content:encoded><![CDATA[<p>A completamento degli appunti sul component Auth voglio segnalare una serie di tutorial interessanti su Web Developement 2.0</p>
<p>http://www.webdevelopment2.com/cakephp-auth-component-tutorial-1/</p>
<p>http://www.webdevelopment2.com/cakephp-auth-component-tutorial-2/</p>
<p>http://www.webdevelopment2.com/cakephp-auth-component-tutorial-3/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/87/cakephp/ancora-su-auth-component/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Auth Component: gestione dei permessi semplice e immediata</title>
		<link>http://www.luizz.it/76/cakephp/auth-component-gestione-dei-permessi-semplice-e-immediata</link>
		<comments>http://www.luizz.it/76/cakephp/auth-component-gestione-dei-permessi-semplice-e-immediata#comments</comments>
		<pubDate>Mon, 28 Jan 2008 07:58:45 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[passo passo]]></category>

		<guid isPermaLink="false">http://www.luizz.it/76/cakephp/auth-component-gestione-dei-permessi-semplice-e-immediata</guid>
		<description><![CDATA[Auth mette a disposizione delle funzioni utili a creare dei semplici sistemi di gestione dei permessi per applicazioni che non richiedono controlli articolati sugli utenti e sulle loro azioni.]]></description>
			<content:encoded><![CDATA[<p>Una volta autenticato un utente si può facilmente controllare il suo operato intercettando ogni azione eseguita all&#8217;interno dell&#8217;applicazione senza ricorrere alle ACL.</p>
<p>Si possono definire controller/action per le quali non richiedere l&#8217;autenticazione definendo il valore dell&#8217;attributo<br />
<code>$allowedActions = array('pages'=>'display')</code><br />
oppure impostandolo dinamicamente attraverso il metodo<br />
<code>$this->Auth->allow(array('pages'=>'display', 'users'=>'index'));</code></p>
<p>Per determinare il tipo di controllo sulle autorizzazioni da eseguire bisogna impostare l&#8217;attributo <strong>$this->Auth->authorize</strong> che può assumere i seguenti valori: </p>
<ul>
<li><em>controller</em> l&#8217;autorizzazione per accedere all&#8217;action richiesta è concessa dal metodo Controller::isAuthorized() che deve essere implementato</li>
<li><em>actions</em> esegue un controllo dell&#8217;action richiesta richiamando il metodo AclComponent::check(), quindi richiede l&#8217;impiego delle ACL.</li>
<li><em>crud</em>  esegue la validazione delle mapActions usando il metodo AclComponent::check()
<li><em>array(&#8216;model&#8217;=> &#8216;name&#8217;)</em> esegue la validazione della mapActions usando il metodo model $name::isAuthorize(user, controller, mapAction)</li>
<li><em>object</em> esegue la validazione di Controller::action usando object::isAuthorized(user, controller, action)</li>
</ul>
<p><strong>Controller</strong></p>
<p>Quando si imposta $this->Auth->authorize to &#8216;controller&#8217;, Auth component cercherà un&#8217;action chimata &#8216;isAuthorized&#8217; per sapere se un utente è autorizzato o meno. Come nell&#8217;esempio che segue.</p>
<pre><code>function isAuthorized() {
		if (isset($this->params[Configure::read('Routing.admin')])) {
			if ($this->Auth->user('admin') == 0) {
				return false;
			}
		}
		return true;
   }</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/76/cakephp/auth-component-gestione-dei-permessi-semplice-e-immediata/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Auth Component: pieno controllo dell’autenticazione</title>
		<link>http://www.luizz.it/75/cakephp/auth-component-pieno-controllo-dellautenticazione</link>
		<comments>http://www.luizz.it/75/cakephp/auth-component-pieno-controllo-dellautenticazione#comments</comments>
		<pubDate>Fri, 25 Jan 2008 10:30:09 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[passo passo]]></category>

		<guid isPermaLink="false">http://www.luizz.it/75/cakephp/auth-component-pieno-controllo-dellautenticazione</guid>
		<description><![CDATA[Come visto negli appunti precedenti, con la semplice attivazione il componente ha dei comportamenti predefiniti durante la fase di autenticazione che potrebbe essere necessario cambiare.
Inoltre vengono messi a disposizione metodi e attributi utili in varie circostanze, oltre che per la gestione dei permessi.]]></description>
			<content:encoded><![CDATA[<p>Come visto negli appunti precedenti, con la semplice attivazione il componente ha dei comportamenti predefiniti durante la fase di autenticazione che potrebbe essere necessario cambiare.<br />
Inoltre vengono messi a disposizione metodi e proprietà utili, oltre che per la gestione dei permessi, in varie occasioni.</p>
<p><strong>Personalizzare l&#8217;autenticazione</strong><br />
Impostando alcuni attributi, si determinano i comportamenti del componente.<br />
Di seguito riporto la descrizione di alcune impostazioni di interesse legate all&#8217;autenticazione.</p>
<p><code>$autoRedirect = true</code><br />
Determina se dopo l&#8217;avvenuta autenticazione AuthComponent redireziona automaticamente alla pagina cercata o no.</p>
<p><code>$fields = array('username' => 'username', 'password' => 'password')</code><br />
Permette di specificare il nome dei campi usati nell&#8217;$userModel diversi da quelli di default necessari all&#8217;identificazione.<br />
Ad esempio: array(&#8216;username&#8217; => &#8216;login_name&#8217;, &#8216;password&#8217; => &#8216;passwd&#8217;).</p>
<p><code>$loginError = null</code><br />
Si può impostare il messaggio di errore che viene utilizzato per comunicare la mancata corrispondenza di userid e password.<br />
Questo è l&#8217;unico messaggio che viene visualizzato per una questione di sicurezza, così non vengono fornite indicazioni circa l&#8217;errore di autenticazione occorso.<br />
Il messaggio qui impostato non viene visualizzato automaticamente nella session Flash, ma deve essere impostato nella view nel seguente modo<br />
<strong>if ($session->check(&#8216;Message.auth&#8217;)) $session->flash(&#8216;auth&#8217;); </strong></p>
<p><code>$authError = null</code><br />
Messaggio di errore che appare quando si tenta di accedere a un&#8217;area per la quale è richiesta l&#8217;autenticazione.</p>
<p><code>$loginRedirect = null</code><br />
Quando si richiede l&#8217;accesso a una pagina e si viene ridirezionati alla pagina di login $loginAction, dopo l&#8217;autenticazione l&#8217;utente viene rimandato alla pagina inizialmente richiesta, senza doverla richiedere nuovamente dopo il login.<br />
Se $loginAction non è impostata, l&#8217;utente viene ridirezionato alla pagina specificata in $loginRedirect</p>
<p><code>$logoutRedirect = null</code><br />
L&#8217;azione di defautl alla quale viene ridiretto l&#8217;utente dopo il logout. L&#8217;URL del redirect viene fornita da AuthComponent::logout() che di default restituisce $loginAction.</p>
<p><code>$loginAction = null</code><br />
E&#8217; una stringa o un array che definisce l&#8217;URL per la richiesta di login.<br />
Se non impostata, AuthComponent la imposta come (pluralize) $userModel / login , a meno che non venga impostata $loginRedirect </p>
<p><code>$userModel = 'User'</code><br />
Il nome del Model utilizzato per eseguire l&#8217;autenticazione degli utenti, ovvero l&#8217;oggetto che detiene username e password degli utenti. Come visto, il valore di default è il model User.</p>
<p><code>$userScope = array()</code><br />
Si possono aggiungere delle condizioni aggiuntive per la verifica dell&#8217;utente.<br />
Ad esempio se si vuole permettere l&#8217;accesso ai soli utenti che abbiano il campo &#8220;attivato&#8221; abilitato allora si può definire  array(&#8216;User.attivato&#8217; => 1). In questo modo, anche se l&#8217;utente inserisce la giusta userid e password gli verrà permesso l&#8217;accesso solo se il suo stato è &#8220;attivato&#8221;.</p>
<p><code>$sessionKey = null</code><br />
Definisce il nome della chiave di sessione che contiene i dati sull&#8217;utente autenticato.<br />
Se non è specificato il valore di default è &#8220;Auth.{$userModel}&#8221;.</p>
<p>Queste impostazioni devono essere definite nel controller</p>
<pre><code>function beforeFilter(){
		$this->Auth->authError = "Per accedere alla pagina richiesta bisogna autenticarsi";
		$this->Auth->loginError = 'Tentativo di accesso fallito. Controllare username e password.';
	}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/75/cakephp/auth-component-pieno-controllo-dellautenticazione/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auth Component: creare un utente, eseguire il login e il logout</title>
		<link>http://www.luizz.it/74/cakephp/auth-component-creare-un-utente-eseguire-il-login-e-il-logout</link>
		<comments>http://www.luizz.it/74/cakephp/auth-component-creare-un-utente-eseguire-il-login-e-il-logout#comments</comments>
		<pubDate>Wed, 23 Jan 2008 12:56:09 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[passo passo]]></category>

		<guid isPermaLink="false">http://www.luizz.it/74/cakephp/auth-component-creare-un-utente-eseguire-il-login-e-il-logout</guid>
		<description><![CDATA[Seconda parte del tutorial: Una volta attivato il component, creata la tabella degli utenti e la maschera per il login, è il momento di creare un utente per verificare il corretto funzionamento dell'autenticazione. Ecco due modi di farlo.]]></description>
			<content:encoded><![CDATA[<p>Una volta attivato il component, creata la tabella degli utenti e la maschera per il login, è il momento di creare un utente per verificare il corretto funzionamento dell&#8217;autenticazione. Ecco due modi di farlo.</p>
<p><strong>Inserimento manuale nella tabella users</strong></p>
<p>Posso inserire i dati nella tabella attraverso il client MySQL o un altro tool grafico (io uso <a href="http://www.phpmyadmin.net/home_page/index.php" target="_blank">phpMyAdmin</a> ) tenendo presente che la password deve essere converita con la funzione hash utilizzata da Cake, la seguente:</p>
<p><em>hashpwd = sha1 ( salt + plain_password )</em></p>
<p>dove <em>salt </em>è la stringa di sicurezza configurata durante l&#8217;installazione di CakePHP presente nel file \app\config\core.php.<br />
sha1 è l&#8217;algoritmo utilizzato per default da Cake per la funzione hash, ma è possibile cambiare metodo con MD5 e SHA256</p>
<p><strong>Gestione utenti</strong></p>
<p>Creo una gestione completa degli utenti sulla tabella <em>users</em> usando il <a href="http://tempdocs.cakephp.org/#TOC112251" target="_blank">bake da riga di comando</a>  così da poter inserire il primo utente.<br />
A questo punto, seguendo il naming canonico, accedo alla mia gestione degli utenti http://mywebspace/users/ e&#8230;. vengo rimandato alla pagina di login !!<br />
Per accedere, almeno temporaneamente alle azioni di users, si interviene su app_controller.php, dove avevamo attivato $authComponent e si inserisce </p>
<pre><code>
function beforeFilter()	{
     $this->Auth->allow();
}</code></pre>
<p>A questo punto cake concede l&#8217;accesso a qualsiasi azione e possiamo andare a creare l&#8217;utente che ci interessa.<br />
Finito l&#8217;inserimento, rimuoviamo la riga con il metodo allow() e proviamo a d accedere di nuovo a http://mywebspace/users/.<br />
Ci dovrebbe chiedere nuovamente la userdi &#8211; password, ma questa volta si può inserire l&#8217;utente inserito e accedere alla sezione della gestione utenti.</p>
<p>Da notare due cose: quando inserisce ad esempio l&#8217;URL http://mywebspace/articles/view/234 l&#8217;utente viene rimandato a http://mywebspace/users/login e dopo aver effettuato il login, viene reindirizzato sull&#8217;URL da lui richiesta in precedenza.<br />
L&#8217;altra cosa da notare è che sulla password immessa in fase di inserimento utente, viene automaticamente eseguito l&#8217;hash prima del salvataggio in tabella, senza bisogno di aggiungere alcun codice nel controller, nel model o altrove.</p>
<p><strong>Il log out</strong><br />
Per chiudere la sessione è sufficente creare un&#8217;action nel controller nel quale invocare il metodo logout di Auth</p>
<pre><code>function logout(){
		$this->Session->setFlash("L\'utente è uscito regolarmente!");
		$this->redirect($this->Auth->logout());
	}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/74/cakephp/auth-component-creare-un-utente-eseguire-il-login-e-il-logout/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auth Component: attivazione e quickstart</title>
		<link>http://www.luizz.it/70/cakephp/auth-component</link>
		<comments>http://www.luizz.it/70/cakephp/auth-component#comments</comments>
		<pubDate>Fri, 18 Jan 2008 11:10:09 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Components]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[passo passo]]></category>

		<guid isPermaLink="false">http://www.luizz.it/70/cakephp/auth-component</guid>
		<description><![CDATA[Tutorial per attivare il componente Auth in cakePHP, il sistema nativo per l'autenticazione degli utenti.]]></description>
			<content:encoded><![CDATA[<p><strong>Attivazione del component Auth</strong></p>
<p>Ho appena installato CakePHP e configurato il database completamente vuoto.<br />
Mi appare la <a href="http://www.luizz.it/wp-content/uploads/2008/01/startpage.gif" title="Pagina iniziale di CakePHP dopo l’installazione">pagina iniziale di Cake, </a>con le indicazioni canoniche.</p>
<p>Creo il file <em>/app/app_controller.php</em> e dichiaro come componente <em>Auth</em></p>
<pre><code>class AppController extends Controller {
	var $components = array('Auth');
}</code></pre>
<p>Il component è subito attivato e ricaricando la pagina si ottiene un errore perchè si è stati reindirizzati all&#8217;URL <em>/users/login</em>.<br />
In pratica essendo attivato in ogni pagina richiesta, il sistema riconosce che l&#8217;utente non è autenticato e considera necessaria l&#8217;autenticazione per accedere a qualsiasi pagina del sito.<br />
Quindi avviene il reindirizzamento verso l&#8217;indirizzo di default <em>/users/login</em> per far si che l&#8217;utente si possa autenticare.</p>
<p>Chiaramente si riceve un messaggio di errore se la pagina ancora non esiste, ovvero il controller e la view relativa.</p>
<p><strong>La struttura necessaria</strong></p>
<p>Servono quindi:</p>
<ul>
<li>un <strong>model </strong>che permetta di conservare e confrontare i dati dell&#8217;utente per l&#8217;accesso (userid e password)</li>
<li>un <strong>controller </strong>per le azioni relative all&#8217;utente (login, logout)</li>
<li>una <strong>view </strong>per il form di autenticazione</li>
</ul>
<p><strong>La tabella</strong></p>
<pre><code>CREATE TABLE IF NOT EXISTS `users` (
  `id` int(5) unsigned NOT NULL,
  `username` varchar(30) NOT NULL,
  `password` varchar(30) NOT NULL,
  `nome` varchar(60) NOT NULL,
  `cognome` varchar(100) NOT NULL,
  `active` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</code></pre>
<p>Gli unici campi essenziali sono username e password. Si possono utilizzare anche nomi diversi per questi campi, purchè si impostino correttamente nel component (vedi sotto).</p>
<p><strong>Il model</strong></p>
<pre><code>class User extends AppModel {
	var $name = 'User';
}</code></pre>
<p><strong>Il controller</strong></p>
<pre><code>class UsersController extends AppController {

	var $name = 'Users';
	var $helpers = array('Html', 'Form' );

	function login(){
	}
}</code></pre>
<p><strong>Il view (login.ctp)</strong></p>
<pre><code>
<p class="login">
check('Auth.login')) $session->flash('Auth.login'); ?>
<h2>Login</h2>

create('User', array('action' =&gt; 'login'));?&gt;
        input('username');?&gt;
        input('password');?&gt;
        submit('Login');?&gt;
    end(); ?&gt;</code></pre>
<p>A questo punto, accedendo a qualsiasi pagina dell&#8217;applicazione, Cake intercetta la richiesta e prima di soddisfarla, controlla che l&#8217;utente sia autenticato.<br />
In caso negativo esegue un redirect sulla pagina di login.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/70/cakephp/auth-component/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

