GVN Group

FR EN Print 

   


 

Exemple d'authentification

L'exemple ci-dessous nous permettra d'illustrer les notions vues dans l'article précédent.

Essayons de rassembler le tout.

Pour que tout fonctionne, vous avez besoin de ce qui suit:

  • une installation correcte de toutes les librairies
  • l'exemple 4 du paquet LiveUser pour créer la structure de la base de données
  • le fichier de configuration pour LiveUser (vu à la page précédente)
  • le fichier de test lui-même
  • un fichier qui servira à l'affichage du formulaire de login
  • un fichier css pour la présentation

Installation

Vous aurez besoin d'installer PEAR et certains paquets PEAR pour faire en sorte que l'exemple fonctionne. En voici la liste:

  • PEAR
  • PEAR::LiveUser v0.16.9
  • PEAR::MDB2 v2.0.0, ainsi qu'un pilote additionnel pour MDB2


  • ou
  • PEAR::DB v3.2.5 si nécessaire ou souhaitée,
  • l'extension mcrypt ou le paquet PEAR::Crypt_RC4 v1.0.2 (lorsque vous utilisez la fonction cookie «Remembxer Me» ou l'algorythme d'encryption RC4)
  • PEAR::HTML_Quickform v3.2.5 pour gérer le formulaire d'identification

Le fichier de configuration

Pour commencer, j'ai utilisé le fichier de configuration de l'un des exemples fournis avec LiveUser. Quelques adaptations ont été effectuées afin de satisfaire ma configuration.

Vous devrez egalement l'effectuer pour votre environnement:

  • l'ini_set pour PEAR (peut être utile lorsque vous utilisez des services d'hébergement partagés)
  • l'information pour se connecter à la base de données: nom d'utilisateur, mot de passe, nom de la base de données et serveur

Le fichier de test

Le code

Télécharger «LU_test.php»


Voici le code PHP correspondant au fichier de test:


<?php
  require_once("conf.php");
  require_once("login.php");
 
  page_top();
  if (!$LU->isLoggedIn())
    {
    echo '<h1>Login</h1>';
    show_login();
    }
  else
    {
    echo '<h1>LiveUser Example</h1>';
    echo '<a href="?logout=1">Logout</a><br /><br />';
    echo '<p>Welcome <em>' . $LU->getProperty('handle') . '</em>!</p>';
    echo '<p>Here is the contents of the "liveuser_users" table:</p>';
    echo '<ul>';
    echo '  <li>auth_user_id:' . $LU->getProperty('auth_user_id') . '</li>';
    echo '  <li>handle:' . $LU->getProperty('handle') . '</li>';
    echo '  <li>passwd:' . $LU->getProperty('passwd') . '</li>';
    echo '  <li>owner_user_id:' . $LU->getProperty('owner_user_id') . '</li>';
    echo '  <li>owner_group_id:' . $LU->getProperty('owner_group_id') . '</li>';
    echo '  <li>lastlogin:' .  date('d.m.Y H:i', $LU->getProperty('lastlogin')) . '</li>';
    echo '  <li>is_active:' . $LU->getProperty('passwd') . '</li>';
    echo '  <li>email: ' . $LU->getProperty('email') . '</li>';
    echo '</ul>';
    }
  page_bottom();
?>

Que fait cet exemple?

L'exemple ci-dessus effectue les opérations suivantes:

  • Il charge le fichier de configuration
  • Il charge le fichier qui s'occupe du formulaire d'identification
  • «page_top()» effectue le lien avec le fichier CSS
  • Si l'utilisateur ne s'est pas identifié, le formulaire d'identification est affiché, sinon les informations de la table «liveuser_users» sont affichées
  • Les bannières HTML sont positionnées

Exemple de résultat du test

Voici les informations affichées à partir de la table «liveuser_users» après une identification réussie:


Scheme

Le formulaire d'identification

Le code

Télécharger «login.php»


<?php
 
function page_top()
  {
  echo '<html><head>';
  echo '<link rel="stylesheet" type="text/css" href="test.css" media="screen" />';
  echo '</head><body>';
  }
 
function page_bottom()
  {
  echo '</body></html>';
  }
 
function show_login()
  {
  ini_set("include_path", '../../libs/PEAR/' . PATH_SEPARATOR . ini_get("include_path"));
  require_once ("HTML/QuickForm.php");
  echo '<p>Please log in to access this page</p>';
  $form =& new HTML_Quickform('logon', 'post');
 
  $renderer =& $form->defaultRenderer();
  $renderer->setElementTemplate('<tr><td align="left" valign="top" width="150">
    <p><span class="label">{label}</span><!-- BEGIN required -->
    <span class="mandatory"> (*)</span><!-- END required --></p></td>
    <td valign="top" align="left"><!-- BEGIN error --><span class="error_msg">{error}</span>
    <br /><!-- END error -->{element}</td></tr>');
 
  $note='<span class="mandatory">(*)</span><span style="font-size:80%;"> Mandatory</span>';
  $form->setRequiredNote($note);
  
  $form->addElement('text', 'handle', 'Userid', array('class'=>'text'));
  $form->addRule('handle', 'Userid is mandatory', 'required');
 
  $form->addElement('password', 'passwd', 'Password', array('class'=>'text'));
  $form->addRule('passwd','Password is mandatory', 'required');
  $form->registerRule('check_pswd', 'callback', 'is_pswd_ok', $form);
  $form->addRule('passwd', 'Logon failed', 'check_pswd');
 
  $form->addElement('advcheckbox', 'rememberMe', '', ' Remember me', 
    array('class'=>'text'), array(false,true));  
 
  $form->addElement('submit', 'btnSubmit', 'Login');
  
  if (!$form->validate())
    {
    $form->display();
    }
  }
    
function is_pswd_ok(&$passwd)
  {
  global $LU;
  $LU->login($LU->getProperty('handle'),$LU->getProperty('passwd'));
  if ($LU->isLoggedIn())
    {
    return true;
    }
  else
    {
    return false;
    }
 
  }
?>

Je ne vais pas (maintenant) détailler le paquet PEAR::Quickform ici.

En bref:

  • Le «renderer» est utilisé pour améliorer la présentation du formulaire
  • Les éléments suivants du formulaire sont ajoutés: identifiant d'utilisateur (ou «handle»), mot de passe et la case à cocher «Remember Me»
  • quelques règles de validations sont également ajoutées
  • si l'information entrée est correcte, le login s'effectue

Le formulaire

Voici un exemple simple du formulaire de login:

Scheme

Le fichier CSS

Télécharger «test.css»

body, table {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 12px;
}
 
h1 {
  font-size: 16px;
  color: #6495ED;
}
 
h2 {
  font-size: 14px;
  padding-left: 10px;
  color: #6495ED;
}
 
h3 {
  font-size: 12px;
  padding-left: 20px;
  color: #6495ED;
}
 
label, .label {
  font-style: italic;
}
 
em {
  color: blue;
}
 
input.text, textarea, select {
  background-color: #F5F3F4;
  border: 1px;
  border-style: solid;
  border-color: #7F9DB9;
}
 
.mandatory {
  font-size: 80%;
  color: #ff0000;
}
 
.error_msg {
  font-size: 11px;
  color: #ff0000;
}
 
.forbidden {
  color: #ff0000;
  font-weight: bold;
}