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

Silverlight Discussion :

Page de login


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut Page de login
    Bonjour,

    Je cherche à protéger mon application avec un mot de passe et un login.

    J'ai donc crée un service sur le serveur permetant de comparer le login et le mdp entré par l'utilisateur avec la liste de login et de mot de passe permis.

    Jusque là pas de soucis.

    Mon soucis se trouve dans l'appel asynchrone à la méthode de mon service.

    En effet, lors du lancement de mon application, je souhaite récupérer les mots de passe/login éventuels dans le cookie et les soumettre à mon service, et suivant le résultat aller soit sur la page de login soit sur la page d'acceuil.

    Or pour le moment, au lancement de mon application je lance la verification des mots de passes/login du cookie et j'ai deux choix durant l'attente du résultat, soit je vais sur la page de login et lors du résultat, s'il est correct, je me retrouve sur la page d'acceuil quelques secondes apres, soit je commence sur la page d'acceuil et suivant le resultat je me retrouve sur la page de login.

    Une 3 possibilité serait de créer une page d'attente mais je préfererai freezer mon application avant qu'il aille sur la page le temps de réceptionner la réponse du serveur, y a t il moyen de réaliser cela ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    tu peux toujours rendre tes pages invisibles et en fonction du résultat rendre celle des deux visible....

    Mais si je peux te donner un conseil, utilise plutôt le service d'autentification standard (AuthenticationService et UserRegistrationService) qui sont bien faits et qui t'évitent de devoir garder des mots de passe en clair dans ta db.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Probleme resolu, merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Salut scharbo,

    Sans être modérateur, je pense pouvoir te dire que ce serait bien pour le forum d'expliquer comment tu as résolus ton problème.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Exact, désolé, donc, j'ai suivi ton idée sur l'invisibilité, sans toutefois passer par les services d'authentification standard, principalement parce que j'avais déja écrit mon service d'authentification, et que je n'avais pas spécialement envie de me plonger dans ceux là (mais je finirai sans doute par m'y intéresser quand j'aurai un moment).

    Ce qui donne

    MainPage.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" 
                                  Source="/Identification" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed" Visibility="{Binding Visibility}">

    Dans le main page de mon application silverlight, je teste au lancement la présence ou non de cookie lié au site, et si le cookie existe, j'envoie le login et le mot de passe à mon service web pour identification.

    MainPage.xaml.cs
    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
    public MainPage()
            {
                InitializeComponent();
                testAuthentification();
                DataContext = model;
            }
     
     
            private void testAuthentification()
            {
                if (!Global.isAuth)
                {
                    Cookie.AutorisationEvent += new Cookie.AutorisationEventHandler(Cookie_AutorisationEvent);
                    Cookie.SetIsAut();
                }
                else
                {
                    model.Visibility = Visibility.Visible;
                }
            }
     
            private void Cookie_AutorisationEvent(bool autorise)
            {
                model.Visibility = Visibility.Visible;
            }

    Avec dans la classe gérant le cookie
    cookie.cs
    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
    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
     
        public class Cookie
        {
            public delegate void AutorisationEventHandler(bool autorise);
            public static event AutorisationEventHandler AutorisationEvent;
     
            private static string Login;
            private static string Password;
            private static bool init = true;
     
            public static string GetCookie(string key) 
            { 
                string[] cookies = HtmlPage.Document.Cookies.Split(';'); 
                foreach (string cookie in cookies) 
                { 
                    string[] keyValue = cookie.Split('='); 
                    if (keyValue.Length == 2) 
                    { 
                        if (keyValue[0].ToString().Trim() == key)                
                            return keyValue[1]; 
                    } 
                } 
                return null; 
            }
     
            public static void SetCookie(string key, string value)
            {
                // Expire in 350 days    
                DateTime expireDate = DateTime.Now + TimeSpan.FromDays(350);
                string newCookie = key + "=" + value + ";expires=" + expireDate.ToString("R");
                HtmlPage.Document.SetProperty("cookie", newCookie);
            }
     
            public static void SetIsAut()
            {
                VerifierAutorisation(GetCookie("login"), GetCookie("password"));
            }
     
            public static void VerifierAutorisation(string login, string mdp)
            {
                Login = login;
                Password = mdp;
                if (Login != null && Password != null)
                    Service.VerifierLoginMdp(Login, Password);
                else
                    OnAutorisationEvent(false);
     
                if (init)
                {
                    Service.AutorisationEvent += new Service.AutorisationEventHandler(Service_AutorisationEvent);
                    init = false;
                }
            }
     
            protected static void OnAutorisationEvent(bool autorise)
            {
                if (AutorisationEvent != null)
                {
                    AutorisationEvent(autorise);
                }
            }
     
            private static void Service_AutorisationEvent(bool autorise)
            {
                Global.isAuth = autorise;
                if (autorise)
                {
                    Cookie.SetCookie("login", Login);
                    Cookie.SetCookie("password", Password);
                }
                OnAutorisationEvent(autorise);
            }
        }

    Le Global.isAuth est simplement un booleen dans une classe statique partagée par toute l'application qui permet de définir l'accès à des pages (pas de notions de roles ici, soit toutes les pages sont accessibles, soit aucune ne l'est à part la page d'identification).

    On a donc dans une page classique

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                if (!Global.isAuth)
                {
                        NavigationService.Navigate(new Uri("/Identification", UriKind.Relative));
     
                }
            }

    et sur la page d'identification

    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
     
        public partial class Identification : Page
        {
            private bool click = false;
            public Identification()
            {
                InitializeComponent();
                Cookie.AutorisationEvent+=new Cookie.AutorisationEventHandler(Cookie_AutorisationEvent);
            }
     
            // S'exécute lorsque l'utilisateur navigue vers cette page.
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                if (Global.isAuth)
                {
                    NavigationService.Navigate(new Uri("/Apercu", UriKind.Relative));
                }
            }
     
            private  string Login;
            private string Password;
            protected void ValiderPassword(object sender, RoutedEventArgs e)
            {
                Login = textBox1.Text;
                Password = passwordBox1.Password;
                Cookie.VerifierAutorisation(Login, Password);
     
            }
     
            private void Cookie_AutorisationEvent(bool autorise)
            {
                if (autorise)
                {
                    NavigationService.Navigate(new Uri("/Apercu", UriKind.Relative));
                }
            }

    Voila, rien de bien fantastique donc, mais ça a résolu mon probleme.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    ne sois pas modeste , ça à l'air pas mal du tout.

    Merci pour la publication.

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

Discussions similaires

  1. problème page de login
    Par cyril911 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 16h14
  2. Authentification avec JAAS et Page de login en page d'acceuil
    Par Slash696 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 02/03/2007, 16h13
  3. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32
  4. Test de Dsiponibilité : Page de login
    Par Nexussmb dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2006, 17h20
  5. [servlet][jsp] Creer une page de login
    Par Beuj dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 19/03/2004, 17h55

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