.: HosiriS :.

Informatica e non solo

Archive for 10 febbraio 2011

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!

Posted in CakePHP, CMS&MVC, Programmazione | Leave a Comment »