Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste : jauth

Wiki: Plan du site - Derniers changements - Back link

Ceci est une ancienne révision du document !


Tutoriel : La classe jAuth

Vous apprendrez dans cet article comment utiliser jAuth.

Ce tutoriel n’est pas destiné à créer un outils de production mais peut servir de base à votre compréhension de Jelix. Il va permettre de développer toute une série d'actions qui va montrer tous les aspects d'utilisation de jAuth.

Pré-requis

Vous devez avoir fait le mini-tutoriel et le tutoriel principal si vous n'êtes pas encore à l’aise avec Jelix. Nous utiliserons le même type d’installation que celle du mini-tutoriel. Nous vous conseillons également la lecture du chapitre concernant jAuth avant d'aborder ce tutoriel.

Créé une application

Dans un premier temps on crée une application, c’est à dire créer l’application et le module/action par défaut. Pour réaliser cette tâche vous devez ouvrir une console ou une fenêtre ‘invite de commandes’ pour travailler en ligne de commandes et vous déplacer dans le répertoire jelix/lib/jelix-scripts. À cet endroit vous tapez:

php jelix.php --auth1 createapp

Le fichier de configuration

Il faut activer le plugin de coordinateur “auth”, et créer un fichier de configuration pour ce plugin, “auth.plugin.ini.php”.

Aussi, ouvrez le fichier /jelix/auth1/var/config/defautconfig.ini.php et modifiez les lignes suivantes.

[plugins]
auth = "auth.plugin.ini.php"

Copiez le fichier /lib/jelix/plugins/coord/auth/auth.coord.ini.php.dist dans le repertoire /jelix/auth1/var/config/. Renommez ce fichier sous le nom auth.plugin.ini.php.

Configuration classique du pluggin

Tel que décrit dans la section jAuth nous allons utiliser la configuration classique. Voici un exemplaire du fichier auth.plugin.ini.php.

  driver = Db
  on_error_action = "jauth~login:out"
  after_login = "auth1~default:index"
  after_logout = "jauth~login:form"
  on_error_sleep = 3
  [Db]
  dao = "jauth~jelixuser"

On utilise donc le driver “Db” pour l'authentification. C'est un driver qui utilise une table en base de données pour stocker les utilisateurs. Il repose sur l'utilisation d'un dao, que l'on indique au niveau du paramètre “dao”. Ici on utilise le dao fourni par défaut avec jelix, mais vous pouvez fournir un autre dao, du moment qu'il contient au moins toutes les propriétés et méthodes de celui par défaut. Vous pouvez ainsi ajouter toutes les propriétés que vous souhaitez.

La table

Ajoutez la table jlx_user dans votre base de données. Il se peut que cette table soit déjà créée si vous utilisez les tests unitaires de Jelix.

  CREATE TABLE `jlx_user` (
  `usr_login` VARCHAR( 50 ) NOT NULL ,
  `usr_password` VARCHAR( 50 ) NOT NULL ,
  `usr_email` VARCHAR( 255 ) NOT NULL ,
  PRIMARY KEY ( `usr_login` )
  );

Les données

Insérez les données suivantes :

INSERT INTO `jlx_user` VALUES ('user20', '10880c7f4e4209eeda79711e1ea1723e', 'user20@cie.com');
INSERT INTO `jlx_user` VALUES ('user10', '990d67a9f94696b1abe2dccf06900322', 'user10@cie.com');
INSERT INTO `jlx_user` VALUES ('user100', '2a33a3553c5eb270ef8539bad6cb85d9', 'user100@cie.com');

On insère ainsi trois utilisateurs existants.

Un mot sur le mot de passe. Pour faciliter la mémorisation du mot de passe, rappelez-vous que dans cet exemple, il est identique au login. Il a été encrypté en MD5, c'est pourquoi il faut s'assurer que dans la section “dao” du fichier auth.plugin.ini.php, il y ait bien

  password_crypt_function = md5

N'oubliez pas de configurer votre fichier /jelix/auth1/var/config/dbprofils.ini.php en fonction de votre base de données et son accès.

Attention : le stockage des mots de passe en md5 n'est pas un moyen sûr. Il vaut mieux utiliser d'autres moyens d'encryptage pour plus de sécurité.

Le contrôleur

Nous arrivons à l’essentiel du tutoriel, le contrôleur, les actions ou si vous préférez les ressources. Remplacez le contenu du fichier /jelix/auth1/modules/auth1/controllers/default.classic.php avec le code suivant:

class defaultCtrl extends jController{
  /*
  * Définition des accès gérés par jAuth
  */
  public $pluginParams = array(
        '*'        => array('auth.required' => false),
        'affiche1' => array('auth.required' => true),
  );
 
  /*
  * La page d'accueil et par défaut
  */
  function index(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    $tpl = new jTpl();
    $rep->body->assign('MAIN', '<p>Contenu de la page d\'accueil.</p>');
 
    return $rep;
  }
 
  /*
  * Cette action ne peut être exécutée que si vous être connecté
  */ 
  function affiche1(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    $tpl = new jTpl();
    $rep->body->assign('MAIN', $tpl->fetch('auth1~affichage1'));
 
    return $rep;
  }
 
  /*
  * Cette action accepte l'affichage du template affichage2 
  * que si personne n'est connecté
  */
  function affiche2(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    // utilisation de jAuth::isConnected pour savoir si l'utilisateur
    // est actuellement identifié ou pas
    if(!jAuth::isConnected()){      
        $tpl = new jTpl();
        $rep->body->assign('MAIN', $tpl->fetch('auth1~affichage2'));
    }else{
        $rep->body->assign('MAIN', 'L\'accès à cette page est refusé!! (si vous êtes connecté)'); 
    }
    return $rep;  	
  }
 
  /*
  * Change le mot de passe d'un user
  */ 
  function changePwd(){  
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main'; 
 
    jAuth::changePassword('user10','jelix');
    $rep->body->assign('MAIN', 'Le mot de passe du "user10" à été modifié'); 
 
    return $rep; 
  }
 
  /*
  *  Affiche tous les users
  */
  function listusers(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    $content = 'Les users enregistrés sont:<br />';
    $users = jAuth::getUserList();
    foreach($users as $user){
       $content .= $user->login . '<br />'; 
    }
    $rep->body->assign('MAIN', $content);
 
    return $rep; 
  }   
 
  /*
  * Affiche le user courrant de la session
  */  
  function getCurrentUser(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    try{
      $user = jAuth::getUserSession();
      $rep->body->assign('MAIN', "Le user courant est ".$user->login);
    }catch(Exception $e){
      $rep->body->assign('MAIN', 'Il n\'y a plus de user de connecté!');
    }
 
    return $rep; 
  }
 
  /*
  * Récupère un user
  */        
  function getUser(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    try{
      $user = jAuth::getUser('user100');
      if($user){
        $rep->body->assign('MAIN', '"user100" à été trouvé.');
      }else{
        $rep->body->assign('MAIN', '"user100" est introuvable.');
      }
    }catch(Exception $e){
      $rep->body->assign('MAIN', 'Le user user100 n\a pus être trouvé!');
    } 
 
    return $rep; 
  }
 
  /*
  * Vérifie le password d'un user
  * Peut être utilisé lors d'un login
  * Dans cet exemple le retour sera toujours un password non valide
  * parce que l'appel à cette action n'a aucun paramètre...
  */
  function verifiePwd(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    $r = jAuth::verifyPassword('user100', $this->param('password'));
    if(!$r){
      $rep->body->assign('MAIN', 'Le pwd du user100 est non valide.'); 
    }else{
      $rep->body->assign('MAIN', 'Le pwd du user100 est valide.'); 
    }
 
    return $rep; 
  }
 
  /*
  * Crée un user en session et en DB
  */
  function createUser(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    // creation d'un user avec le login tempuser et le mot de passe pwtempuser       
    $newUser = jAuth::createUserObject('tempuser','pwtempuser');
    $newUser->email = 'tempuser@cie.com';
 
    try{
      $user = jAuth::saveNewUser($newUser); 
      $rep->body->assign('MAIN', 'Le user : '. $user->login .' vient d\'être créé!'); 
    }catch(Exception $e){
      $rep->body->assign('MAIN', 'Impossible d\'ajouter ce nouvel utilisateur!');
    }   
 
    return $rep; 
  }
 
  /*
  * Met à jour un user existant
  */
  function updateUser(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    $updUser = jAuth::getUser('tempuser');
    if($updUser){
      $updUser->email = 'jelix@cie.com';
      try{
        jAuth::updateUser($updUser); 
 
        // Pour vérifier visuelement la modification	
        $user = jAuth::getUser('tempuser');
        $rep->body->assign('MAIN', 'Le nouveau courriel du user tempuser : '. $user->email);
      }catch(Exception $e){
	$rep->body->assign('MAIN', 'La mise à jour du user tempuser à échoué! ');	
      }
    }else{
      $rep->body->assign('MAIN', 'Le user tempuser n\'existe pas!');
    }
 
    return $rep;
  }
 
  /*
  * Efface un user de la session et de la DB
  */
  function deleteUser(){
    $rep = $this->getResponse('html');
    $rep->bodyTpl = 'main';
 
    if(jAuth::getUser('tempuser')){
      if(jAuth::removeUser('tempuser')){
        $rep->body->assign('MAIN', 'Le user tempuser a été effacé!');
      }else{
        $rep->body->assign('MAIN', 'Le user tempuser n\'a pas été effacé!');
      }
    }else{
      $rep->body->assign('MAIN', 'Le user tempuser n\'existe pas!');
    }
 
    return $rep;
  }
 
}

Le template main

Créez le fichier qui servira de template principal. Il est nommé main.tpl et doit être créé dans le répertoire /jelix/auth1/modules/auth1/templates/.

<h2>Tutoriel pour la jAuth</h2>
<p>Liste des users dans la DB<br />
user10/user10 ou user10/jelix<br />
user20/user20<br />
user100/user100<br /></p>
<hr />
{$MAIN}
<hr />
<ul>
  <li><a href="{jurl 'jauth~login:form'}">login</a></li>   
  <li><a href="{jurl 'jauth~login:out'}">logout</a></li>  
</ul>
<hr />
<ul>
  <li><a href="{jurl 'auth1~default:index'}">Page d'accueil</a></li>
  <li><a href="{jurl 'auth1~default:affiche1'}">Affichage privé</a></li>
  <li><a href="{jurl 'auth1~default:affiche2'}">Interdit si connecté!</a></li> 
</ul>
<hr />
<ul>  
  <li><a href="{jurl 'auth1~default:listusers'}">Affiche les users</a></li> 
  <li><a href="{jurl 'auth1~default:getCurrentUser'}">Le user courant</a></li> 
  <li><a href="{jurl 'auth1~default:getUser'}">Recherche le user100</a></li> 
  <li><a href="{jurl 'auth1~default:verifiePwd'}">Vérifie le pwd de "user100"</a></> 
  <li><a href="{jurl 'auth1~default:changePwd'}">Modifie un pwd</a></>
</ul>
<hr />
<ul>  
  <li><a href="{jurl 'auth1~default:createUser'}">Crée "tempuser"</a></li>
  <li><a href="{jurl 'auth1~default:updateUser'}">Update "tempuser" vers "jelix"</a></li>
  <li><a href="{jurl 'auth1~default:deleteUser'}">Efface le user "jelix"</a></li>
</ul>

Le template affichage1

Créez le fichier template qui nécessite une authentification. Il est nommé affichage1.tpl et doit être créé dans le répertoire /jelix/auth1/modules/auth1/templates/.

<p>Contenu pour l'affichage 1 (avec authentification....)</p>

Le template affichage2

Créez le fichier template qui ne nécessite aucune authentification. Il est nommé affichage2.tpl et doit être créé dans le répertoire /jelix/auth1/modules/auth1/templates/.

<p>Contenu pour l'affichage 2</p>
<p>Cette page s'affiche uniquement si vous n'êtes pas connecté</p>

fr/tutoriels/jauth.1272390135.txt.gz · Dernière modification : 2010/04/27 17:42 de rob2
Fils rss des changements récents dans le wiki Creative Commons License