.: HosiriS :.

Informatica e non solo

Sistema di login in CakePHP

Posted by hosiris su febbraio 10, 2011

Nei vari esperimenti fatti con cake, non ho mai fatto cenno a come poter mettere in sicurezza parte del nostro sito. Ma sappiamo bene come ogni attività amministrativa debba essere protetta per evitare che malintenzionati sfruttino falle su operazioni “avanzate”.

La prima cosa da fare è creare la tabella degli utenti:

CREATE TABLE `users`(
    `id` int(10) unsigned not null auto_increment,
    `name` varchar(50) not null,
    `surname` varchar(50) not null,
    `username` varchar(50) not null,
    `password` varchar(50) not null,
    `email` varchar(50) not null,
    `created` datetime,
    `modified` datetime,
    PRIMARY KEY (`id`)
) ENGINE InnoDB DEFAULT CHARSET=utf8_unicode_ci

Dopo aver creato il controller, il model e le viste, manualmente o facendo uso di bake, aggiungiamo i seguenti metodi alla classe del controller:

function login() {}
function logout() {
    $this->redirect($this->Auth->logout());
}

Creiamo il file login.ctp all’interno della cartella delle viste:

<?php
    if ($session->check('Message.auth')) $session->flash('auth');
    echo $form->create('User', array('action' => 'login'));
    echo $form->input('username');
    echo $form->input('password');
    echo $form->end('Login');
?>

Nella cartella app creiamo un file chiamato “app_controller.php”. Questo file conterrà delle funzioni che saranno valide per tutti i controller che andremo a generare.

class AppController extends Controller {
    var $components = array('Auth');
    function beforeFilter() {
        $this->Auth->userModel = 'User';
        $this->Auth->fields = array('username' => 'username', 'password' => 'password');
        $this->Auth->loginAction = array('admin' => false, 'controller' => 'users', 'action' => 'login');
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
    }
}

Questa funzione causerà il redirect alla pagina di login per tutti i controller, quindi dovremo sovrescrivere questo funzionamento su tutti i controller che non necessitano di tale comportamento (la pagina dei contatti ad esempio). In ognuno dei controller “liberi” aggiungiamo il seguente metodo:

function beforeFilter() {
    $this->Auth->allow('index');
    parent::beforeFilter();
}

Ricordiamo che sarà necessario permettere l’aggiunta di un utente quindi nel controller users_controller.php aggiungiamo:

function beforeFilter() {
    $this->Auth->allow('add');
    parent::beforeFilter();
}

Ok, con questo abbiamo concluso. E’ un sistema basilare, che quindi andrà migliorato.

Buon divertimento!

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: