5.2 Authentification
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Les systèmes d'authentification utilisateur constituent une partie courante de nombreuses applications Web. Dans CakePHP, il y a plusieurs systèmes pour authentifier des utilisateurs, chacun fournissant des options différentes. Au cœur du composant d'authentification, on vérifie si l'utilisateur possède un compte sur le site. Si c'est le cas, le composant donnera accès au site complet à l'utilisateur.
Ce composant peut être combiné avec le composant ACL (access control lists) pour créer des niveaux d'accès plus complexes à l'intérieur d'un site. Le composant ACL pourrait par exemple, vous permettre d'autoriser un utilisateur à accéder aux zones publiques du site, tout en autorisant un autre utilisateur d'accéder aux portions administratives protégées du site.
Le composant AuthComponent de CakePHP peut servir à créer un tel système rapidement et facilement. Regardons comment vous construiriez un système d'authentification vraiment simple.
Comme n'importe quel composants, vous l'utilisez en ajoutant 'Auth' à la liste des composants de votre contrôleur :
class FooController extends AppController {
var $components = array('Auth');
class FooController extends AppController {var $components = array('Auth');
Ou ajoutez-le à votre AppController, ainsi tous vos contrôleurs l'utiliseront :
class AppController extends Controller {
var $components = array('Auth');
class AppController extends Controller {var $components = array('Auth');
Maintenant, il y a quelques conventions auxquelles penser quand on utilise le composant AuthComponent. Par défaut, AuthComponent s'attend à ce que vous ayez une table appelée 'users' avec des champs nommées 'username' et 'password'.
Dans certaines situations, les bases de données ne vous laissent pas utiliser 'password' comme nom de colonne. Voyez Définir les variables du composant Auth, pour trouver un exemple sur la façon de changer le nom par défaut des champs afin de travailler avec votre propre environnement.
Définissons notre table users en utilisant le SQL suivant :
CREATE TABLE users (
id integer auto_increment,
username char(50),
password char(50),
PRIMARY KEY (id)
);
CREATE TABLE users (id integer auto_increment,username char(50),password char(50),PRIMARY KEY (id));
Quelque chose à garder à l'esprit lors de la création d'une table pour stocker toutes vos données d'authentification d'un utilisateur, c'est que le composant Auth s'attend à ce que la valeur du mot de passe stocké dans la base de données soit hashée, plutôt que d'être stockée en texte brut. Assurez-vous que le champ que vous utiliserez pour stocker les mots de passe est assez long pour stocker le hash (40 caractères pour SHA1, par exemple).
Si vous voulez ajouter un utilisateur manuellement dans la base de données, la méthode la plus simple pour obtenir la bonne donnée est de tenter de s'identifier et de regarder le log sql.
Pour le paramétrage le plus basique, il vous faudra seulement créer deux actions dans votre contrôleur :
class UsersController extends AppController {
var $name = 'Users';
var $components = array('Auth'); // Pas nécessaire si déclaré dans votre contrôleur app
/**
* Le Composant Auth fournit la fonctionnalité nécessaire
* pour le login, donc vous pouvez laisser cette fonction vide.
*/
function login() {
}
function logout() {
$this->redirect($this->Auth->logout());
}
}
class UsersController extends AppController {var $name = 'Users';var $components = array('Auth'); // Pas nécessaire si déclaré dans votre contrôleur app/*** Le Composant Auth fournit la fonctionnalité nécessaire* pour le login, donc vous pouvez laisser cette fonction vide.*/function login() {}function logout() {$this->redirect($this->Auth->logout());}}
Bien que vous puissiez laisser la fonction login() vide, vous avez besoin de créer la template de vue login (sauvegardée dans app/views/users/login.ctp). C'est toutefois la seule template de vue du contrôleur Users que vous avez besoin de créer. L'exemple ci-dessous présuppose que vous utilisez l'assistant Form :
<?php
echo $session->flash('auth');
echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
?>
<?phpecho $session->flash('auth');echo $form->create('User', array('action' => 'login'));echo $form->input('username');echo $form->input('password');echo $form->end('Login');?>
Cette vue crée un formulaire d'identification où vous entrez un nom d'utilisateur et un mot de passe. Une fois que vous soumettez ce formulaire, le composant Auth s'occupe du reste pour vous. Le message de session flash affichera les notices générées par AuthComponent. Dès que l'identification est réussie, l'enregistrement de la base de données correspondant à l'utilisateur actuellement identifié est sauvegardé en session.
Croyez le ou non, on en a terminé ! Voici comment écrire un système d'authentification incroyablement simple, fondé sur la base de données, avec le composant Auth. Cependant, il y a encore plus de choses que nous pouvons faire. Intéressons-nous maintenant à quelques usages avancés du composant.


























