Utilisation de MembershipProviders et création de MembershipProvider personnalisés
[20 mn de lecture - paru le 6/6/2006 10:29:54 AM - Public : Confirmé]
|
   
|
Auteur
2 Création et personnalition de son provider
1.1 Pourquoi créer son propre provider
Bien que Microsoft ai voulu nous simplifier la vie en créant des classes à usage courrant, il existe certains cas où l’on peut avoir besoin de créer son propre MembershipProvider : • Si vous avez déjà une base de donnée existante et que vous ne désirez pas utiliser aspnetbdd. • Si vous utilisez une base de donnée non supportés par des providers pas défaut (XML, base de donnée propriétaire…) • Si le serveur web ne communique pas directement avec la base de donnée (web services…)
Avant de continuer plus avant, je me dois de vous préciser qu’il existe une alternative avant de créer votre propre provider. Celle-ci consiste à réaliser une fusion de la base de donnée standard « aspnetbdd » avec votre base de donnée.
Avantages : • Le coût en terme de temps : La solution étant déjà implémentée dans les classes standard, inutile d’envisager un développement spécifique. • La modularité : La solution proposant beaucoup de fonctionnalités que vous n’êtes pas obligés d’implémenter au départ, il est toujours tant des les implémenter plus tard. Inconvenants :
• La base de donnée aspnetdb possède une structure chargée, elle ne répond donc pas à des besoins strictes. • Impossible de modifier le schéma de aspnetdb sans réaliser un provider spécifique.
1.2 Principe de fonctionnement et exemple
Pour suivre cette démonstration explicative, nous reprendrons l’exemple de projet précédemment créé au chapitre 2 que nous mettrons à jour au cours de la démonstration. L’objet de la démonstration est élémentaire. Il consiste à implémenter un MembershipProvider personnalisé que nous appellerons MyMembershipProvider. Dans ce dernier nous nous contenterons de redéfinir la méthode ValidateUser se basant sur notre base de donnée.
La première étape va donc consister à créer une base de données SQL express composée d’une table « users ». C’est cette table qui sera utilisée par la méthode ValidateUser de notre MembershipProvider :
Créer la table users comme suit en mettant id avec le paramètre RowGUID à oui
Nous allons maintenant insérer notre utilisateur test comme suit : *Ne remplissez pas la colonne id car la propriété rowguid à vrai se chargera de trouver un uniqueidentifier pour vous.
Nous allons spécifier dans le Web.config que nous désirons une authentification par formulaire et que la page Default.aspx est la page de login par défaut:
Nous allons spécifier que nous utilisons un MembershipProvider spécifique utilisant notre base de donnée récemment crée. astuce : pour obtenir la chaîne de connexion correspondante à une connexion disponible dans l’explorateurs de serveurs – clic droit sur la connexion – propriétés – Chaîne de connection.
Nous allons à présent supprimer le control UserCreationWizard qui sera inutile pour la démonstration et ajouter un LoginView de cette manière :
*Ce contrôle permet d’afficher un contenu différent selon que nous sommes logués ou pas.
Maintenant nous abordons les étapes clés de notre démonstration : la création de notre MembershipProvider personnalisé.
Nous allons créer le répertoire App_Code de manière à pouvoir y « ranger » notre classe. Faisons pour cela un clic droit sur le projet :
Ensuite nous allons insérer la classe dans App_Code en cliquant droit sur le dossier puis « ajouter un nouvel élément ». Choisissez « Classe » et nommez là « MyMembershipProvider ». Nous obtenons ceci :
Rappel : nous avons expliqué au Chapitre 1 le rôle du MembershipProvider. Il s’agit d’une classe abstraite spécifiant le cahier des charges à respecter par tous les MembershipProvider spécifiques.
Ainsi nous déclarons ici un héritage de la classe Mère MembershipProvider et implémentons facilement les méthodes à redéfinir en cliquant droit comme suit:
Maintenant redéfinissons notre méthode ValidateUser se trouvant à la fin comme suit:
Le code proposé en exemple n’est bien sur pas un « Best-Practice » il a cependant le mérite d’illustrer très simplement notre exemple.
Testons maintenant notre application :

|