Pxxo_Widget_IdentityManager

Ce widget regroupe plusieurs modules permettant de gérer les identités au sein d'une application. En utilisant ce widget, on peut s'authentifier, s'inscrire, valider les comptes par email, se faire rappeler son mot de passe, et éditer ses informations personnelles. Les comptes sont stockés dans un annuaire LDAP ou dans une base de données relationnelle. Pxxo_Widget_IdentityManager permet l'accès ou non aux sous widgets selon le paramètre menu_tab_to_show et selon l'état de connexion (Auth).

Les différents modules de ce widget sont les suivants :

  • Auth : affiche un formulaire de connexion (login et mot de passe)
  • Register : affiche un formulaire d'inscription dont les champs principaux sont : login, mot de passe et email (mais avec la possibilité d'en ajouter d'autres)
  • Profil : affiche un formulaire pour éditer les informations fournies lors de l'inscription (ceci suppose que l'utilisateur soit authentifié avant d'y accéder)
  • SendCode : affiche un formulaire pour envoyer le code de validation de l'inscription par email
  • EnterCode : affiche un formulaire pour saisir le code de validation de l'inscription
  • RetrievePassword : affiche un formulaire pour envoyer un nouveau mot de passe par email
  • initialize_driver : mode spécial qui initialise le pilote pour accéder à la base de données (permet de créer la table si elle n'existe pas) et affiche le résultat de cette opération

Exemples :

Démo :

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

[ lien direct ]

A voir aussi :

Paramètres

Nom Valeur par défaut Description
connection_driver 'LDAP' type d'accès aux données (“LDAP” ou “MDB2” ou “AIT”)
connection_options array() options pour l'accès aux données (Voir exemple ci-dessous)
username chaine vide initialise les formulaires avec un login
action_urls calculé automatiquement définit les urls pour afficher les sous widgets
menu_tab_to_show array('auth','profil','register',
'entercode','sendcode',
'retrievepassword')
configure les onglets à afficher/cacher
default_tab 'auth' configure l'onglet a afficher par défaut
codeverif_path calculé automatiquement chemin pour stocker les fichiers temporaires pour la validation du compte par email
skip_codeverif false évite la validation du compte par email
display_signin_link false affiche un lien hypertexte “Connexion” permettant d'accéder au formulaire d'authentification
display_register_link true affiche un lien hypertexte “Inscription” permettant de basculer sur la page d'inscription d'un nouveau compte
show_lost_password true affiche un lien vers le widget Retrievepassword qui rappelle un mot de passe oublié
skip_cgu true ne demande pas l'acceptation des CGU avant l'inscription
cgu<p>Avant de continuer,
veuillez lire les conditions
générales d'utilisation</p>
définit le texte des Conditions Générales d'Utilisation
ask_current_password false demande la saisie du mot de passe actuel pour pouvoir modifier le profil
mail_driver 'mail' 'back-end' de PEAR_Mail (mail, sendmail ou smtp). [ Doc officielle ]
mail_options array() paramètres spécifiques au back-end de PEAR_Mail [ Doc officielle ]
mail_sender 'noreply@noreply.com' adresse mail de l'expéditeur (champ d'entête 'From') [ Doc officielle ]
onregister_callback null Éventuelle callback utilisateur permettant d'exécuter du code lorsqu'une inscription est arrivée à son terme. Le premier paramètre est le tableau $user qui décrit l'utilisateur enregistré. Le second paramètre est une référence vers l'objet de connexion (LDAP, MDB2 ou AIT).
onsignin_callback callback L'éventuelle callback utilisateur appelée une fois que l'utilisateur est connecté. Le premier paramètre est le tableau descriptif de l'utilisateur, le second paramètre est une instance du widget Pxxo_Widget_Identity_Auth.
onsignout_callback callback L'éventuelle callback utilisateur appelée une fois que l'utilisateur est déconnecté. Le premier paramètre est le tableau descriptif de l'utilisateur, le second paramètre est une instance du widget Pxxo_Widget_Identity_Auth.
external_auth_callback callback L'éventuelle callback utilisateur qui sera entièrement chargée de gérer l'authentification de l'utilisateur. Cette callback est également appelée lorsque l'utilisateur se déconnecte. Le premier paramètre est le mode courant du widget ('signin' ou 'signout'). Le second paramètre est une instance du widget Pxxo_Widget_Identity_Auth.

Le paramètre "connection_options"

Le paramètre “connection_options” est un tableau associatif décrivant les options pour personnaliser l'accès à la base de données : les options communes à LDAP, MDB2, AIT , les options pour la connexion LDAP, les options pour la connexion MDB2 et les options pour la connexion AIT.

Options communes

Les options suivantes sont communes au paramétrage LDAP et MDB2 :

Nom Valeur par défaut Description
usernamecol - Attribut à utiliser dans la base de données pour le login
mailcol - Attribut à utiliser dans la base de données pour l'adresse email
realnamecol - Attribut à utiliser dans la base de données pour prénom et nom de l'utilisateur
passwordcol - Attribut à utiliser dans la base de données pour le mot de passe
passwordtype 'clear' (facultatif) Type d'encodage du mot de passe dans la base de données. Choix possibles : 'clear', 'md5'

Si usernamecol et mailcol ont des valeurs identiques, le mail sera utilisé comme identifiant (login).

Options pour la connexion LDAP

Si vous avez défini le paramètre connection_driver='LDAP', voici les options de personnalisation pour la connection :

Nom Valeur par défaut Description
host - Le nom réseau (host ou ip) du serveur LDAP
port - Le port du serveur LDAP
basedn - Le dn de la racine de l'annuaire
binddn - Le login root de l'annuaire
bindpw - Le mdp root de l'annuaire
usersdn valeur de basedn Indique la branche où se trouvent les utilisateurs. (facultatif, si rien n'est indiqué les utilisateurs sont cherchés à la racine de l'annuaire)
registerdn valeur de usersdn Indique la branche où l'on souhaite enregistrer les utilisateurs. (facultatif, si rien n'est indiqué les utilisateurs sont enregistré à la racine de l'annuaire, plus précisément : au même endroit que ce qui est indiqué dans usersdn)
userdefaultvalue - Permet d'indiquer l'attribut obligatoire objectclass et éventuellement les autres attributs obligatoires des différents schémas (cf remarque ci-dessous)

Exemple :

 
$params = array();
$params['connection_driver']  = 'LDAP';
$params['connection_options'] = array(
    'usernamecol'   => 'uid', // ou la meme valeur que mailcol si on veut le mail comme login
    'mailcol'       => 'mail',
    'realnamecol'   => 'cn',
    'passwordcol'   => 'userPassword',
    'passwordtype'  => 'md5', // ou 'clear'
    'host'          => 'ldap.exemple.com',
    'port'          =>  389,
    'basedn'        => 'dc=exemple,dc=com',
    'binddn'        => 'cn=manager,dc=exemple,dc=com',
    'bindpw'        => 'secret',
    'usersdn'       => 'dc=inist,dc=fr', // les connexions se font sur la totalité de l'annuaire
    'registerdn'    => 'ou=people,dc=exemple,dc=com',
    'userdefaultvalue' => array(
        'objectclass' => array('top','inetOrgPerson'),
     )
);

userdefaultvalue contient les attributs et valeurs que l'on doit utiliser par défaut pour la création des comptes. Ce paramètre permet surtout de préciser la valeur de objectclass ainsi que tous les paramètres obligatoires au sens LDAP :

'userdefaultvalue' => array(
    'objectclass' => array('top','inetOrgPerson'),
    )

Options pour la connexion MDB2

Si vous avez défini le paramètre connection_driver='MDB2', voici les options de personnalisation pour la connection :

Nom Valeur par défaut Description
dsn - (obligatoire) Description de la connexion à la base de données.
Exemple : phptype(dbsyntax)://username:password@protocol+hostspec/database?option=value
Pour plus de détails lisez la documentation MDB2 : Syntaxe Tableau, Syntaxe Chaine
db_options - (facultatif) Vous pouvez ajouter des options MDB2 comme par exemple le niveau de debuggage ou de portabilité : Liste des options

Exemple :

 
 
// exemples de paramètrage pour MDB2
$params['connection_driver']  = 'MDB2';
$params['connection_options'] = array(
 
     // parametres generiques
     'usernamecol'  => 'username',
     'mailcol'      => 'mail',                           
     'realnamecol'  => 'realname',
     'passwordcol'  => 'password',
     'passwordtype' => 'md5',
 
     // parametres specifiques MDB2
     'dsn'          => 'mysql://root@locahost/test',
     'db_options'   => array('debug' => 2),
     'table'        => 'pxxo_widgets_register',
);
 

Options pour la connexion AIT

Si vous avez défini le paramètre connection_driver='AIT', le connecteur AIT (All-Is-Tag) sera utilisé. Voici les options de personnalisation pour la connexion :

Nom Valeur par défaut Description
handle - (obligatoire) Pointeur vers object créé par AIT::connect
itemtype 'users' (facultatif) Vous pouvez choisir le nom du Type d'Item à utiliser

Exemple :

 
$params['connection_driver'] = 'AIT';
$params['connection_options'] = array(
    'usernamecol' => 'uid',
    'mailcol'     => 'mail',
    'realnamecol' => 'realname',
    'passwordcol' => 'password',
    'handle'      => AIT::connect('mysql:host=localhost;dbname=ait', 'root'),
    'itemtype'    => 'users',
);

Le paramètre "actions_url"

Ce paramètre permet de modifier toutes URL utilisés par le Widget et les sous widgets. On peut ainsi utiliser de la réecriture d'URL afin d'obtenir des URL “parlante”…

Exemple :

 
$params['action_urls']  = array(
    'auth'              => $this->Registry->url_base.'/se-connecter',
    'profil'            => $this->Registry->url_base.'/mon-profil',
    'register'          => $this->Registry->url_base.'/inscription',
    'entercode'         => $this->Registry->url_base.'/verifier-code-inscription',
    'sendcode'          => $this->Registry->url_base.'/rappeler-code-inscription',
    'retrievepassword'  => $this->Registry->url_base.'/mot-de-passe-perdu',
);

Les URL doivent être absolues et non relatives.
Ce détail est important car ces urls sont utilisées lors des différents envois de mails.

Modes/Méthodes

Mode Description
index bascule sur l'onglet définit dans 'default_tab'
initialize_driver initialise le pilote pour accéder à la base de données (permet de créer la table si elle n'existe pas) et affiche un onglet indiquant le résultat de cette opération
auth bascule sur l'onglet d'authentification
profil bascule sur l'onglet d'édition du profil
register bascule sur l'onglet d'inscription
entercode bascule sur l'onglet qui demande d'entrer son code de verification
sendcode bascule sur l'onglet qui va envoyer ou renvoyer le code de verification
retrievepassword bascule sur l'onglet permettant de se faire rappeler son mot de passe

Exemple

 
<?php
 
require_once 'Pxxo/Widget/IdentityManager.php';
 
$params['connection_driver'] = ... ;  // cf. ci-dessus
$params['connection_options'] = ... ; // cf. ci-dessus
$params['menu_tab_to_show']     = array('auth', 'profil', 'register', 'entercode', 'sendcode', 'retrievepassword');
$params['default_tab']          = 'auth'; // par défaut on tombera sur l'onglet demandant l'authentification
$params['show_form']            = true;
$params['show_lost_password']   = false;
$params['skip_cgu']             = false;
$params['cgu']                  = '...CGU...';
$params['ask_current_password'] = true;
$params['skip_codeverif']       = true;
$params['mail_driver']          = 'mail';
$params['mail_options']         = array();
$params['mail_sender']          = 'noreply@noreply.com';
 
$widg = new Pxxo_Widget_IdentityManager($params);
 
$widg->addDecorator('Pxxo_Widget_Decorator_Core');
$widg->main();
$widg->dump();
 
 
?>

Maintenant voici comment utiliser les callbacks utilisateurs :

 
<?php
 
require_once 'Pxxo/Widget/IdentityManager.php';
 
function my_onregister($user, $connection) {
  // on s'amuse a convertir en majuscule le realname
  // ca n'a pas bcp d'interet mais bon c'est pour l'exemple...
  $user['realname'] = strtoupper($user['realname']);
  $connection->update($user);
}
$params['connection_driver'] = ... ;  // cf. ci-dessus
$params['connection_options'] = ... ; // cf. ci-dessus
$params['onregister_callback'] = 'my_onregister';
$widg = new Pxxo_Widget_IdentityManager($params);
 
$widg->addDecorator('Pxxo_Widget_Decorator_Core');
$widg->main();
$widg->dump();
 
 
?>
fr/doc/pxxo_widget_identitymanager.txt · Dernière modification: 2009/07/09 17:33 par kerphi
 
 

©2003-2010 Pxxo

Partenaires : INIST-CNRS | Sourcesup | Web2.0 chat server | Micropolia | Jeux gratuits | Areno