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

Windows Presentation Foundation Discussion :

MVVM et PasswordBox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut MVVM et PasswordBox
    Bonjour,

    voilà dans mon appli j'ai une première fenêtre de login (nom d'utilisateur et mot de passe)...
    Pour l'instant cette fenetres est bindé sur mon ViewModel...

    Mon problème, comment passer le mot de passe ? car impossible de binder le "Password" d'une PasswordBox.

    Alors qu'on dise que pour des questions de sécurité il ne faut pas stocker des mots de passe en mémoire...

    Ok pour la sécurité (bien que le cryptage des zones de textes "password" laisse à désirer...), s'il le faut, ça me va..., mais je fait comment alors pour récupérer le mot de passe dans mon ViewModel et tester la correspondance "UserName", "Password" (avec un mot de passe crypté) ???

    MErci de vos tuyaux

  2. #2
    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 : 43
    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
    Par défaut
    Y a sûrement pas mal de façons de faire ça, mais je trouve que la plus propre est d'utiliser un Behavior :

    Code C# : 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
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Interactivity;
     
    namespace WpfApplication1
    {
        public class PasswordBinder : Behavior<PasswordBox>
        {
            public string Password
            {
                get { return (string)GetValue(PasswordProperty); }
                set { SetValue(PasswordProperty, value); }
            }
     
            public static readonly DependencyProperty PasswordProperty =
                DependencyProperty.Register("Password", typeof(string), typeof(PasswordBinder), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPasswordChanged));
     
            private static void OnPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                var binder = d as PasswordBinder;
                if (binder == null)
                    return;
     
                if (binder.AssociatedObject.Password != binder.Password)
                    binder.AssociatedObject.Password = binder.Password;
            }
     
     
            protected override void OnAttached()
            {
                base.OnAttached();
                AssociatedObject.PasswordChanged += PasswordBoxPasswordChanged;
            }
     
            protected override void OnDetaching()
            {
                base.OnDetaching();
                AssociatedObject.PasswordChanged -= PasswordBoxPasswordChanged;
            }
     
            void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e)
            {
                this.Password = AssociatedObject.Password;
            }
        }
    }

    Ca s'utilise comme ça :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            <PasswordBox>
                <i:Interaction.Behaviors>
                    <local:PasswordBinder Password="{Binding Password}" />
                </i:Interaction.Behaviors>
            </PasswordBox>

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    Et pour ce qui est de la securite ? Pourquoi lavoir desactive si c pour magouiller pour le remettre ?

  4. #4
    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 : 43
    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
    Par défaut
    Citation Envoyé par CaptainChoc Voir le message
    Et pour ce qui est de la securite ? Pourquoi lavoir desactive si c pour magouiller pour le remettre ?
    Euh... désactivé quoi et remettre quoi ?

    Effectivement ce code n'utilise pas la propriété SecurePassword, mais tu peux toujours modifier pour l'utiliser si tu veux... Perso j'ai jamais été très convaincu de l'utilité de la classe SecureString : si tu as besoin d'un password, c'est pour l'utiliser, et pour l'utiliser, il faudra bien l'avoir en clair à un moment ou à un autre...

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    Pourquoi ont ils désactivé le binding dans une PasswordBox pour des raisons de "sécurité" si finalement on doit magouiller pour récupérer la valeur saisie... c'est pas un peu bizarre comme raisonnement ?

  6. #6
    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 : 43
    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
    Par défaut
    Citation Envoyé par CaptainChoc Voir le message
    Pourquoi ont ils désactivé le binding dans une PasswordBox pour des raisons de "sécurité" si finalement on doit magouiller pour récupérer la valeur saisie... c'est pas un peu bizarre comme raisonnement ?
    Bah je trouve ça bizarre moi aussi, mais bon, c'est comme ça... Il y a sans doute de bonnes raisons qui m'échappent

Discussions similaires

  1. [MVVM] Utilisation des InputBindings
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 25
    Dernier message: 07/12/2009, 12h09
  2. MVVM : Listes et SelectedItems
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 22/03/2009, 00h05
  3. [MVVM] Colle du soir : MVVM et NavigationService
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 23
    Dernier message: 19/03/2009, 10h44
  4. Command dans MVVM : un peu de mal à situer
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 15/03/2009, 13h45

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