Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
26 juin 2009 5 26 /06 /juin /2009 10:41

Voici la configuration du  Membership provider se trouvant dans le Web.config :

 

Code :

<membership>
            <providers>
                <remove name="AspNetSqlMembershipProvider"/>
                <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="myConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordFormat="Hashed" maxInvalidPasswordAttempts="100" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
            </providers>
        </membership>

 

D’après cette configuration, le mot de passe doit être de 6 caractères minimum et il est “Hashed” ce qui veut dire que l’on ne peut pas retrouver le mot de passe de l’utilisateur dans la base de données.

Si on utilise directement MembershipUser.ResetPassord, la méthode va générer un mot de passe qui est généralement très compliqué. La solution serait de Override la méthode, mais créer une nouvelle classe qui hérite de MemberShipUser juste pour Override une méthode c’est un peu lourd.

 

Voici comment procéder pour faire plus simple.

Tout d’abord nous allons créer une méthode qui va nous retourner le MemberShipUser à partir du nom de l’utilisateur.

Code :

Public Function GetMembershipUser(ByVal userName As String) As MembershipUser
        Dim mu As MembershipUser
        If userName = Nothing Then
            mu = Membership.GetUser()
        Else
            mu = Membership.GetUser(userName)
        End If
        Return mu
    End Function

Ensuite nous allons créer une méthode qui va générer notre nouveau mot de passe.

Code :

Public Function GenPassword(ByVal lenght As Integer) As String
        Dim strAlphaNum As String()
        Dim password As New StringBuilder
        Dim rnd As New Random
        strAlphaNum = New String(58) {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
        For iAlpha As Integer = 1 To lenght
            password.Append(strAlphaNum(rnd.Next(58)))
        Next
        Return password.ToString
    End Function

Vous remarquerez que la lettre O et le chiffre 0 ne seront pas utilisés car trop souvent confondu par les utilisateurs.

 

Et enfin nous allons créer notre propre méthode ResetUserPassword.

Code :

Public Function ResetUserPassword(ByVal userName As String) As String
        Dim mu As MembershipUser = GetMembershipUser(userName)
        Dim oldPassword As String = mu.ResetPassword
        Dim newPassword As String = GenPassword(Membership.MinRequiredPasswordLength)
        mu.ChangePassword(oldPassword, newPassword)
        Return newPassword
    End Function

L’astuce est simple. On utilise MembershipUser .ResetPassword qui va nous retourner un nouveau mot de passe, puis on utilise MembershipUser.ChangePassword pour modifier à nouveau le mot de passe, mais cette fois ci, en utilisant notre propre méthode GenPassword.

Partager cet article

Repost 0
Published by Cyril - dans ASP.NET
commenter cet article

commentaires