Hello à tous,
J'utilise PostGre comme base de donnée et je voulais pouvoir utiliser les contrôles .NET de gestion d'utilisateur. J'ai donc du écrire deux classes Provider (NpgsqlMembershipProvider et NpgsqlRoleProvider) qui surchagent les classes MembershipProvider et RoleProvider.
Ces classes utilisent la librairie npsql installée lors de l'installation de PostGre.
Je commence par la classe NpgsqlMembershipProvider. Pour commencer il est utile de lire la documentation sur la classe MembershipProvider. Et de jeter un oeil sur l'exemple d'implémentation trouvé ici.
Après il m'as suffit de copier le code de l'exemple et de remplacer tous les accès base en utilisant les api npgsql (fichier joint NpgsqlMembershipProvider).
De la même façon et à partir de la documentation de la classe RoleProvider et de l'exemple on obtient la classe NpgsqlRoleProvider (fichier joint NpgsqlRoleProvider).
Il n'y a plus qu'a mettre à jour le web.config pour utiliser nos classes
D'abord la chaîne de connection à la BDD :
Pour ajouter le membership provider dans la section system.web
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <connectionStrings> <add name="PgsqlLocalServer" connectionString="Server=127.0.0.1;Port=5432;Database=mabdd;User Id=monuser;Password=monpwd" providerName="Ngpgsql" /> </connectionStrings>
et enfin on ajoute le role provider
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <membership defaultProvider="NpgsqlMembershipProvider"> <providers> <add connectionStringName="PgsqlLocalServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" name="NpgsqlMembershipProvider" type="NpgsqlMembershipProvider"/> </providers> </membership>
Comme les mots de passe (dans mon cas) ne sont pas stockés en clair, j'ai du ajouter une clé de validation (pour crypter le mot de passe) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <roleManager enabled="true" defaultProvider="NpgsqlRoleProvider"> <providers> <add connectionStringName="PgsqlLocalServer" applicationName="/" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/> </providers> </roleManager>
Il faut aussi créer les tables dans votre base PostGre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <machineKey validationKey="maclef" validation="SHA1"/>
et voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 CREATE TABLE users ( applicationname text NOT NULL, username text NOT NULL, passwd text NOT NULL, email text NOT NULL, passwordquestion text, passwordanswer text, isapproved bit(1), islockedout bit(1), creationdate date, lastlogindate date, lastpasswordchangeddate date, lastlockedoutdate date, failedpasswordattemptcount integer, failedpasswordattemptwindowstart date, failedpasswordanswerattemptcount integer, failedpasswordanswerattemptwindowstart date, comments text, lastactivitydate date, CONSTRAINT users_primarykey PRIMARY KEY (applicationname, username) ); CREATE TABLE roles ( rolename text NOT NULL, applicationname text NOT NULL, CONSTRAINT roles_primarykey PRIMARY KEY (rolename, applicationname) ); CREATE TABLE usersinroles ( username text NOT NULL, rolename text NOT NULL, applicationname text NOT NULL, CONSTRAINT usersinrole_primarykey PRIMARY KEY (username, rolename, applicationname) );tout fonctionne bien
avec les composants de l'onglets "Connexion" de VS2005.
Logiquement si les classes NpgsqlMembershipProvider et NpgsqlRoleProvider sont compilées dans une dll avec nom fort cela devrait même pouvoir être gèrer via la console d'administration de VS2005 (pas tester).
J'espère que cela vous sera utile
Dès que j'ai le temps et que j'ai compris comment faire j'écrirai les classe qui permettent de surcharger la gestion du profil (via le web.config) pour PostGre. Mais la par contre la documentation expliquant cette surcharger est bcp plus hardu à lire![]()
Partager