Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, faq, sources pour .NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/06/2007, 20h22   #1
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
Par défaut [Source] MemberShipProvider et RoleProvider pour postgre (npgsql)

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 :

Code :
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>
Pour ajouter le membership provider dans la section system.web

Code :
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>
et enfin on ajoute le role provider

Code :
1
2
3
4
5
<roleManager enabled="true" defaultProvider="NpgsqlRoleProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" applicationName="/" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/>
	</providers>
</roleManager>
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 :
<machineKey validationKey="maclef" validation="SHA1"/>
Il faut aussi créer les tables dans votre base PostGre :

Code :
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)
);
et voilà 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
Fichiers attachés
Type de fichier : cs NpgsqlMembershipProvider.cs (51,0 Ko, 56 affichages)
Type de fichier : cs NpgsqlRoleProvider.cs (16,4 Ko, 37 affichages)
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 16h23   #2
Giovanny Temgoua
Rédacteur
 
Avatar de Giovanny Temgoua
 
Étudiant
Inscription : novembre 2003
Messages : 3 831
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2003
Messages : 3 831
Points : 3 406
Points : 3 406


Cela pourrait être une bonne entrée pour la page sources

Citation:
Logiquement si les classes NpgsqlMembershipProvider et NpgsqlRoleProvider sont compilées dans une dll
Il serais peut être mieux que tu compiles et que tu mettes les binaires (donc la dll) en même temps que le source. Et si possible, un petit exemple pour le test, et ce sera parfait !

Citation:
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.
Au besoin, tu peux te faire aider par les guru du forum (en ouvrant un sujet dans le forum approprié).

Giovanny Temgoua est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 19h45   #3
Ditch
Expert Confirmé Sénior

 
Avatar de Ditch
 
Didier Danse
Inscription : mars 2003
Messages : 4 136
Détails du profil
Informations personnelles :
Nom : Didier Danse
Âge : 31

Informations forums :
Inscription : mars 2003
Messages : 4 136
Points : 7 783
Points : 7 783
Envoyer un message via MSN à Ditch Envoyer un message via Skype™ à Ditch
Citation:
Envoyé par dinguot
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
Salut,

J'ai expliqué en quelques mots ceci ici: http://ditch.developpez.com/aspnet2/...pprovider/#LVI Peut être cela peut être utile comme base très succincte
__________________

Didier Danse

Most Valuable Profesionnal SharePoint
Microsoft Certified Application Developer
Mes articles sur developpez.com
Mon site perso

Ditch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 16h01   #4
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
Je sais comment créer et utiliser un profile .
Mais je veut pouvoir le stocker dans une base PosGre

Tiens j'ai trouvé une doc

Une bête classe à surcharger
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 16h13   #5
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
Tiens en relisant mon premier post je vois que j'ai oublié un truc

dans ces deux sections :

Code :
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>
et enfin on ajoute le role provider

Code :
1
2
3
4
5
<roleManager enabled="true" defaultProvider="NpgsqlRoleProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" applicationName="/" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/>
	</providers>
</roleManager>
on voit qu'il y a un paramètre "applicationName" que j'ai positionné à "/". Dans la description des tables :

Code :
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)
);
on remarque que chaque table contient une propriété "applicationname".

éh éh éh ... intéressant non ?

Cela signifie que vous pouvez utiliser la même BDD pour gérer les utilisateurs de différent site à condition que le paramètre applicationName des providers (dans le web.config) soit personnaliser pour chaque site :

pour le site 1 :
Code :
1
2
3
4
5
6
7
8
9
10
<membership defaultProvider="NpgsqlMembershipProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="Site1" requiresUniqueEmail="true" passwordFormat="Hashed" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" name="NpgsqlMembershipProvider" type="NpgsqlMembershipProvider"/>
	</providers>
</membership>
<roleManager enabled="true" defaultProvider="NpgsqlRoleProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" applicationName="Site1" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/>
	</providers>
</roleManager>
pour le site 2 :
Code :
1
2
3
4
5
6
7
8
9
10
<membership defaultProvider="NpgsqlMembershipProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="Site2" requiresUniqueEmail="true" passwordFormat="Hashed" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" name="NpgsqlMembershipProvider" type="NpgsqlMembershipProvider"/>
	</providers>
</membership>
<roleManager enabled="true" defaultProvider="NpgsqlRoleProvider">
	<providers>
		<add connectionStringName="PgsqlLocalServer" applicationName="Site2" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/>
	</providers>
</roleManager>
Et hop ! les utilisateurs des deux sites (Site1 et Site2) vont être gérer dans la même base (cétypasbô ça ).
Mieux si les deux site utilise le même applicationName, alors là (et c'est l'extase !) les utilisateurs seront "mutualisés" sur les deux sites.

Bref c'est rigolo et ça ouvre beaucoup de possibilités
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 22h36   #6
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
Pour ceux que cela pourraient intéresser, voici le code de la fonction qui m'a permis de tester mes deux classes

Code :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
protected void Button1_Click(object sender, EventArgs e)
    {
 
        try
        {
            //
            // Test de NpgsqlMembershipProvider
            //
 
            NpgsqlMembershipProvider tester = new NpgsqlMembershipProvider();
            NameValueCollection config = new NameValueCollection();
            MembershipUser user;
            MembershipCreateStatus status;
            NpgsqlProviderUserKey provideruserkey;
            int tot;
 
            config.Add("applicationName", "/");
            config.Add("maxInvalidPasswordAttempts", "5");
            config.Add("passwordAttemptWindow", "10");
            config.Add("minRequiredNonAlphanumericCharacters", "1");
            config.Add("minRequiredPasswordLength", "7");
            config.Add("passwordStrengthRegularExpression", "");
            config.Add("enablePasswordReset", "true");
            config.Add("enablePasswordRetrieval", "true");
            config.Add("requiresQuestionAndAnswer", "false");
            config.Add("requiresUniqueEmail", "true");
            config.Add("passwordFormat", "Encrypted");
            config.Add("connectionStringName", "PgsqlLocalServer");
 
            tester.Initialize(null, config);
            user = tester.CreateUser("name", "password", "email", "question", "answer", true, null, out status);
            switch (status)
            {
                case MembershipCreateStatus.DuplicateEmail :
                    throw new Exception("DuplicateEmail");
                case MembershipCreateStatus.DuplicateProviderUserKey :
                    throw new Exception("DuplicateProviderUserKey");
                case MembershipCreateStatus.DuplicateUserName :
                    throw new Exception("DuplicateUserName");
                case MembershipCreateStatus.InvalidAnswer :
                    throw new Exception("InvalidAnswer");
                case MembershipCreateStatus.InvalidEmail :
                    throw new Exception("InvalidEmail");
                case MembershipCreateStatus.InvalidPassword :
                    throw new Exception("InvalidPassword");
                case MembershipCreateStatus.InvalidProviderUserKey :
                    throw new Exception("InvalidProviderUserKey");
                case MembershipCreateStatus.InvalidQuestion :
                    throw new Exception("InvalidQuestion");
                case MembershipCreateStatus.InvalidUserName :
                    throw new Exception("InvalidUserName");
                case MembershipCreateStatus.ProviderError :
                    throw new Exception("ProviderError");
                case MembershipCreateStatus.UserRejected :
                    throw new Exception("UserRejected");
            }
 
            tester.ChangePassword("name", "password", "newone");
            tester.ChangePasswordQuestionAndAnswer("name", "newone", "pouet", "pouetpouet");
            tester.FindUsersByEmail("email", 0, 1, out tot);
            tester.FindUsersByName("name", 0, 1, out tot);
            tester.GetAllUsers(0, 10, out tot);
            tester.GetNumberOfUsersOnline();
            tester.GetPassword("name", "pouetpouet");
            provideruserkey = new NpgsqlProviderUserKey();
            provideruserkey.UserName = "name";
            provideruserkey.ApplicationName = "/";
            tester.GetUser(provideruserkey, false);
            tester.GetUserNameByEmail("email");
            tester.ResetPassword("name", "pouetpouet");
            tester.UnlockUser("name");
            tester.UpdateUser(user);
            tester.ValidateUser("name", "newone");
 
            //
            // Test de NpgsqlRoleProvider
            //
 
            NpgsqlRoleProvider role = new NpgsqlRoleProvider();
 
            role.Initialize("NpgsqlRoleProvider", config);
            role.CreateRole("role");
            string[] users = { "name" };
            string[] roles = { "role" };
            role.AddUsersToRoles(users, roles);
            role.FindUsersInRole("role", "name");
            role.GetAllRoles();
            role.GetRolesForUser("name");
            role.GetUsersInRole("admin");
            role.IsUserInRole("name", "admin");
            role.RemoveUsersFromRoles(users, roles);
            role.RoleExists("role");
            role.DeleteRole("role", true);
 
            tester.DeleteUser("name", true);
            Resultm.Text = "c'est tout bon :)";
        }
        catch (NpgsqlException n)
        {
            Resultm.Text = n.Line + " : " + n.Message;
        }
    }
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 17h29   #7
Aspic
Expert Confirmé Sénior
 
Avatar de Aspic
 
Homme Florent Diedler
Étudiant
Inscription : août 2005
Messages : 3 781
Détails du profil
Informations personnelles :
Nom : Homme Florent Diedler
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2005
Messages : 3 781
Points : 4 188
Points : 4 188
Salut, pourrais tu envoyer un zip avec ta source complète ?
__________________
Qui ne tente rien n'a rien !
Ce qui ne nous tue pas nous rends plus fort !!
Mon projet ZELDA en C++/Allegro
http://www.tutoworld.com - Le Forum -
Mes ressources Dotnet (cours, sources, tutos)
--------------------------------------------
+ + =

Ne pas oublier le Tag !
Aspic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 14h28   #8
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
je suis en train de bosser sur la surcharge de la classe profile provider pour npgsql

je te ferai un lot groupé.

Sinon le code du membreshipprovider et du role provider sont attaché au premier post
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 16h04   #9
Aspic
Expert Confirmé Sénior
 
Avatar de Aspic
 
Homme Florent Diedler
Étudiant
Inscription : août 2005
Messages : 3 781
Détails du profil
Informations personnelles :
Nom : Homme Florent Diedler
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2005
Messages : 3 781
Points : 4 188
Points : 4 188
Citation:
Envoyé par dinguot Voir le message
je suis en train de bosser sur la surcharge de la classe profile provider pour npgsql

je te ferai un lot groupé.

Sinon le code du membreshipprovider et du role provider sont attaché au premier post
Pas de soucis, dès que tout est pret, prévient nous
__________________
Qui ne tente rien n'a rien !
Ce qui ne nous tue pas nous rends plus fort !!
Mon projet ZELDA en C++/Allegro
http://www.tutoworld.com - Le Forum -
Mes ressources Dotnet (cours, sources, tutos)
--------------------------------------------
+ + =

Ne pas oublier le Tag !
Aspic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 18h00   #10
Jean-Marc68
Membre du Club
 
Homme
Inscription : mars 2007
Messages : 112
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2007
Messages : 112
Points : 43
Points : 43
Salut à toutes et à tous,

Tout d'abord merci à dinguot pour son tuto tellement clair que même moi je l'ai compris.

J'ai toutefois un petit problème que mon niveau en ASP et c# ne me permet pas de résoudre sans votre aide.

J'ai tout d'abord créé un bouton sur une page et un label nommé Resultm. Derrière le click du bouton le code de test du post #6.
La réponse est "c'est tout bon ". J'en déduit donc que ça doit fonctionner.
J'avais du toutefois placer le passwordFormat à clear pour une raison de clé.

J'ai placé une CreateUserWizard sur ma page et j'ai essayé de créer un user.
Lorsque je clique sur le bouton de création du user, je reçois le message suivant :
Citation:
L'exeption FormatException n'a pas été gérée par le code utilisateur
Les caractères supplémentaires ne pouvant pas être analysés sont à la fin de la chaîne.
Cette erreur s'applique à la ligne 222 du NpgsqlMembershipProvider.cs qui dit :
Citation:

returnBytes[i] =
Convert.ToByte(hexString.Substring(i * 2, 2), 16);
La valeur de i lors de l'erreur est 0 et le returnBytes a une dimension de 12. Les valeurs de 0 à 12 sont toutes à 0.

Quel est le problème, et comment le résoudre ?

Merci de vos z'avis z'avisés,
Jean-Marc
__________________
Il n'y a pas de problèmes. Il n'y a que des solutions.
Malheureusement, elles sont parfois un peu dur à trouver ...


Aucune touche n'a été maltraitée pour réaliser ce texte.
Jean-Marc68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 18h27   #11
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 770
Points : 33 996
Points : 33 996
C'est cool quand des gens envoient des trucs utiles au lieu de poser des questions
Merci à toi dinguot
J'ajoute ça à mes favoris, je sens que ça resservira...
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 14h26   #12
Jean-Marc68
Membre du Club
 
Homme
Inscription : mars 2007
Messages : 112
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2007
Messages : 112
Points : 43
Points : 43
Par défaut Problème pour le login

J'ai fini par résoudre le problème du codage du mot de passe, qui ne venait pas du fait que le passwordFormat était à Hashed.
Dans le web.config j'ai mis le requiresQuestionAnswer à false.
Dans le CreateUserWizard, les champs de question et de réponse n'apparaissaient donc plus, or si le passwordFormat est à Hashed, le mot de passe ET la réponse à la question sont encodés.
Comme la réponse est donc à null, Elle ne peut forcément pas être encodée.

En ajoutant juste un if (password != null) pour donner ceci dans le NpgsqlMembershipProvider.cs
Code :
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
private string EncodePassword(string password)
{
string encodedPassword = password;
if (password != null)
{
switch (PasswordFormat)
{
case MembershipPasswordFormat.Clear:
  break;
case MembershipPasswordFormat.Encrypted:
  encodedPassword = Convert.ToBase64String(EncryptPassword(Encoding.Unicode.GetBytes(password)));
  break;
case MembershipPasswordFormat.Hashed:
  HMACSHA1 hash = newHMACSHA1();
  hash.Key = HexToByte(machineKey.ValidationKey);
  encodedPassword = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
  break;
default:
  throw new ProviderException("Unsupported password format.");
}
}
return encodedPassword;
}
De la sorte, si le password entré est null, il retournera null.
Ce ne sera pas un problème pour le champs du mot de passe qui ne sera jamais null, puisqu'il y a un RequiredFieldValidator intégré dans le Wizard de sorte que le mot de passe ne soit pas null.

Jean-Marc
__________________
Il n'y a pas de problèmes. Il n'y a que des solutions.
Malheureusement, elles sont parfois un peu dur à trouver ...


Aucune touche n'a été maltraitée pour réaliser ce texte.
Jean-Marc68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 23h29   #13
dinguot
Membre habitué
 
Inscription : mars 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 114
Points : 101
Points : 101
oulala 5 ans déjà que j'ai écris cette étude que je n'ai jamais eu le temps de finaliser.

depuis le temps il existe une dll complète et plutôt pas mal pour postgre sql.
elle se nomme npgsql.
dinguot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h50.


 
 
 
 
Partenaires

Hébergement Web