IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

[Source] MemberShipProvider et RoleProvider pour postgre (npgsql)


Sujet :

Contribuez .NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    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 : 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>
    Pour ajouter le membership provider dans la section system.web

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

    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>
    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
    <machineKey validationKey="maclef" validation="SHA1"/>
    Il faut aussi créer les tables dans votre base PostGre :

    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)
    );
    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 Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut


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

    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 !

    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é).


  3. #3
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    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


  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    Par défaut
    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

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    Par défaut
    Tiens en relisant mon premier post je vois que j'ai oublié un truc

    dans ces deux sections :

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

    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>
    on voit qu'il y a un paramètre "applicationName" que j'ai positionné à "/". Dans la description des tables :

    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)
    );
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    Par défaut
    Pour ceux que cela pourraient intéresser, voici le code de la fonction qui m'a permis de tester mes deux classes

    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
    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;
            }
        }

  7. #7
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 905
    Points : 4 388
    Points
    4 388
    Par défaut
    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 !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    Par défaut
    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

  9. #9
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 905
    Points : 4 388
    Points
    4 388
    Par défaut
    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 !

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut
    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 :
    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 :

    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.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    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...

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    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 : 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
    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.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 122
    Points
    122
    Par défaut
    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.

Discussions similaires

  1. [postgres+java+RPM] comment java pour postgres
    Par thief dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 18/09/2004, 17h52
  2. Hebergeur pour postgres ??
    Par elbandido dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/08/2004, 00h45
  3. la commande mysql_fetch_field pour postgre
    Par dim_italia dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/08/2004, 16h49
  4. qq'un conniat un driver OleDB pour postgres?
    Par hatake.kakashi dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/07/2004, 14h49
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo