Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Homme Profil pro Claude Larocque
    Développeur informatique
    Inscrit en
    mai 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Larocque
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : mai 2009
    Messages : 78
    Points : 53
    Points
    53

    Par défaut Vérifier les spécifications des mots de passe

    Bonjour,
    Les mots de passes que je désire utiliser doivent contenir:
    a) Un minimum de 7 caractères
    b) Au moins une lettre majuscule
    c) Au moins un chiffre

    Donc, Claude1954 serait un mot de passe valide.

    Voici une image pour plus d'informations, par la suite, le code utilisé
    sur le bouton CmdOK
    ChangerMotDePasse.jpg

    Code:
    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    Private Sub CmdOK_Click()
    On Error GoTo ErrTrap
        Dim QueryName As String
        Dim QueryName2 As String
        Dim Txt As String
     
        QueryName = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                            "LoginPasswordAdm", "LoginPassword")
        QueryName2 = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                            "LoginHistorique", "LoginHistorique")
        Txt = ""        ' Default
        If Len(Me.TxtUserID) > 0 And Len(Me.TxtPwd) > 0 Then
            Txt = Nz(DLookup("LoginMotDePasse", QueryName, _
                        "UTilisateurID = '" & Me.TxtUserID & "'"), "")
        End If
     
        If Len(Txt) > 0 And StrComp(Me.TxtPwd, _
                                                Txt, 0) = 0 Then
        Else
            MsgBox "Password Not Valid For This UserID"
            Me.TxtPwd.SetFocus
            GoTo ExitPoint
        End If
     
        If Len(Me.TxtPwdNew_1) > 0 And _
                    Len(Me.TxtPwdNew_2) > 0 And _
                    StrComp(Me.TxtPwdNew_1, _
                    Me.TxtPwdNew_2, 0) = 0 Then
            P_SetNewPassword QueryName
            P_SetNewDate QueryName
            P_SetNewHistorique
            MsgBox "Password Changed Successfully"
            DoCmd.Close acForm, Me.Name
        Else
            MsgBox "New Passwords 1 & 2 Do Not Match"
            Me.TxtPwdNew_1.SetFocus
        End If
     
    ExitPoint:
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewPassword(ByVal TgtQueryName As String)
    On Error GoTo ErrTrap
        Dim Qst As String
        Dim db As DAO.Database
     
        Set db = DBEngine(0)(0)
     
        Qst = "UPDATE " & TgtQueryName & _
                " SET LoginMotDePasse = '" & Me.TxtPwdNew_1 & _
                "' Where UTilisateurID = '" & Me.TxtUserID & "';"
     
        db.Execute Qst, dbFailOnError
     
    ExitPoint:
        Set db = Nothing
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewDate(ByVal TgtQueryName As String)
     
    On Error GoTo ErrTrap
        Dim Qst As String
        Dim db As DAO.Database
     
        Set db = DBEngine(0)(0)
     
        Qst = "UPDATE " & TgtQueryName & _
                " SET MotDePasseLastChanged = '" & Now() & _
                "' Where UTilisateurID = '" & Me.TxtUserID & "';"
                    CurrentDb.Execute Qst, dbFailOnError
     
        db.Execute Qst, dbFailOnError
     
    ExitPoint:
        Set db = Nothing
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewHistorique()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
     
    'On Error GoTo ErrTrap
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("LoginHistorique", dbOpenDynaset)
     
    With rst
    .AddNew
    !UTilisateurID = Me.TxtUserID
    !MotDePasse = Me.TxtPwdNew_1
    !Nom = "User change login password"
    .Update
    End With
     
     
    'ExitPoint:
    '    Set dbs = Nothing
     '   Set rst = Nothing
     '   rst.Close
     '   dbs.Close
     
     
    'ErrTrap:
    '    MsgBox Err.Number & " - " & Err.Description
    '    Resume ExitPoint
    End Sub
    Merci d'avance à tous pour votre aide, de plus, ce code pourrait être utile à plusieurs utilisateurs qui recherchent un module de connexion

    Claude du Québec, Canada

  2. #2
    Rédacteur/Modérateur

    Avatar de loufab
    Homme Profil pro Fabrice CONSTANS
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    8 727
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabrice CONSTANS
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 8 727
    Points : 17 930
    Points
    17 930

    Par défaut

    Bonjour,

    a) Un minimum de 7 caractères

    Code :
    if len(password)>=7 then 'content
    b) Au moins une lettre majuscule

    Code :
    if password like "*[A-Z]*" then ' content
    c) Au moins un chiffre

    Code :
    if password like "*[0-9]*" then ' content
    Il y a un tuto sur l'opérateur Like. Pour du plus complexe il y a également un tuto sur les Regex.

    Cordialement,

  3. #3
    Membre du Club
    Homme Profil pro Claude Larocque
    Développeur informatique
    Inscrit en
    mai 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Larocque
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : mai 2009
    Messages : 78
    Points : 53
    Points
    53

    Par défaut Ce code ne vérifie que la longueur du champ qui est de 7

    Bonjour,
    Voilà, au moins je peux changer un mot de passe et une erreur se produit lorsque ce nouveau mot de passe n'a pas 7 caractères de long.

    Est-ce que tu peux voir pourquoi après avoir vérifié la longueur du champ, ce code ne vérifie pas les autres elseIf.

    Lorsque le champ est de 7 caractères que ce soit 1111111 ou aaaaaaa ou AAAAAAA le mot de passe est accepté.
    Moi j'essai:
    1- Lorsque le mot de passe contient 7 caractères, vérifie s'il contient au moins 1 caractère alphabétique minuscule.

    2- Lorsque ce dernier est vérifié, vérifie s'il contient au moins 1 caractère alphabétique minuscule et 1 caractère alphabétique majuscule.

    3- Lorsque ces 2 derniers sont vérifiés, vérifie s'il contient au moins 1 caractère alphabétique minuscule, 1 caractère alphabétique majuscule, 1 caractère numérique et une longueur de 7 caractères.

    À chaque étape si le mot de passe n'est pas valide, un message (formulaire) nommé "MessageMotDePasseInvalide" doit apparaître.

    Je me sers de "DoCmd.OpenForm "MessageMotDePasseInvalide" dans ce code que voici:

    J'ai placé ce code dans l'évènement après MAJ:

    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
    Private Sub TxtPwdNew_1_AfterUpdate()
         Dim q
         Dim special As Boolean
         Dim no As Boolean
         Dim str As Boolean
         Dim test As Integer
         Dim invalid As Boolean
         Dim pwrdTest As Boolean
         Dim pwd As String
     
         Const minCharacters = 7
     
         invalid = False
         special = False
         no = False
         str = False
         pwrdTest = False
     
         pwd = Me.TxtPwdNew_1
     
        If Len(pwd) >= minCharacters Then
        For q = 1 To Len(pwd)
             test = Asc(Mid(pwd, q, 1))
             If test > 97 And test < 122 Then 'check lower case alpha
                       str = True
             ElseIf test >= 65 And test <= 90 Then 'check upper case alpha
                       str = True
             ElseIf test >= 48 And test <= 57 Then 'check number
                       no = True
             ElseIf test = 32 Then 'invalid
                       invalid = True
             End If
        Next
        If str And no And Not invalid Then
               pwrdTest = True
        End If
    Else
        DoCmd.OpenForm "MessageMotDePasseInvalide"
        Me.TxtPwdNew_1.SetFocus
        Exit Sub
    End If
    End Sub
    J'ai essayé avec ce que tu m'as fait parvenir auparavant, mais cela ne marchait pas, serais-tu assez aimable pour faire les changements dans ce code.

    Merci
    Claude du Québec

  4. #4
    Rédacteur/Modérateur

    Avatar de loufab
    Homme Profil pro Fabrice CONSTANS
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    8 727
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabrice CONSTANS
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 8 727
    Points : 17 930
    Points
    17 930

    Par défaut

    Pourquoi tu utilises une boucle for alors que tu peux t'en passer ?

    Utilises le code que je t'ai fourni.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    If contient 7 then
       if contient majuscule then
         if contient nombre then
            c'est bon 
         else
            problème
         endif
       else
           problème
       endif
    else 
     problème
    endif
    ou sinon

    Code :
    1
    2
    3
    4
     
    If not contient 7 then goto problème
    if not contient majuscule then goto problème
    if not contient nombre then goto problème
    Le plus rapide et le plus simple est souvent le meilleur.

    Cordialement,

  5. #5
    Rédacteur/Modérateur

    Avatar de loufab
    Homme Profil pro Fabrice CONSTANS
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    8 727
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabrice CONSTANS
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 8 727
    Points : 17 930
    Points
    17 930

    Par défaut

    En ce qui concerne ton code :

    Cette approche est fausse. En effet tu affecte vrai dès la première vérification sans te soucier des autres.

    Exemple : si la première vérification est vrai :
    Code :
    1
    2
    If test > 97 And test < 122 Then 'check lower case alpha
                       str = True
    A aucun moment tu ne n'affirme que l'une des suivantes peut être fausse.

    Si tu traces il devrait passer partout mais comme c'est déjà vrai ça le reste même si les autres sont fausses.

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •