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

ASP.NET MVC Discussion :

Login automatique et redirection


Sujet :

ASP.NET MVC

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut Login automatique et redirection
    Bonjour.

    Je souhaite que mon application vérifie la présence d'un cookie sur le poste client pour authentification. Et ce depuis n'importe quelle page du site ! Mais sans utiliser le JavaScript svp, je trouve ça sale et trop lent...

    Si le cookie existe, alors on logue la personne, en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebSecurity.Login(login.UserName, login.Password, persistCookie: login.RememberMe)
    Puis on effectue une redirection sur un autre controller.

    Voilà mon architecture de controller :
    BaseController : Controller
    MesController : BaseController
    J'ai prévu une méthode "SpeedLogin()" dans mon controller Account :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ActionResult SpeedLogin()
            {
                HttpCookie cookie = HttpContext.Request.Cookies.Get("LivDevis.Login");
                WebSecurity.Login(cookie.Values.Get("UserName"), cookie.Values.Get("Password"), persistCookie: true);
     
                return RedirectToAction("Index", "DashBoard");
            }
    Et voilà avec quoi je compte l’appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (User.Identity.IsAuthenticated)
                {
                    object o = Session["preferredName"];
                    if (o == null)
                    {
                        // appel de SpeedLogin()
                    }
                }
    Ma question est : Où dois-je placer mon bout de code, et comment appeler la méthode "SpeedLogin()" ?

    Merci .

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    1 petit détail que j'ai oublié de mentionner. Sur mon site, j'ai 2 pages Home. Une pour les User authentifiés, et une pour ceux qui ne le sont pas.

    Dans les pages prévues pour les gens authentifiés, j'ai ce bout de code qui permet de les rediriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Authorize(Roles = "SuperAdmin, Admin, SaleAgent")]
    Je pourrais donc faire la même chose dans les pages pour les non-authentifiés, pour dire que si vous n'êtes pas logué, vous êtes redirigé. Seulement je ne sais pas comment interpréter ça en code. Vous savez ?

    Il faudra donc, lorsque l'internaute va sur le site, que son statut soit vérifié. L'url de redirection devra changer en fonction de s'il est connecté ou pas.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    Pour atteindre mon objectif, je dois être capable de changer la valeur de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormsAuthenticationSettings.DefaultLoginUrl = "XXXX";
    Seulement on ne peut pas y mettre une valeur, il s’agit uniquement d'un accesseur ! :/

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    j'ai étendu la classe "AuthorizeAttribute".

    Pour les internautes non connectés, en cas de refus d'accès à une page, retour à la page d'accueil du coté "non connecté".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AuthorizeUnauthentificated]
    Pour les internautes connectés, en cas de refus d'accès à une page, retour à la page d'accueil du coté "connecté".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AuthorizeAuthentificated]
    Un extrait de mon code :
    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
    public class AuthorizeUnauthentificated : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                base.OnAuthorization(filterContext);
     
                if (filterContext.Result is HttpUnauthorizedResult)
                {
                    /...
                }
            }
     
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                return (!httpContext.User.Identity.IsAuthenticated);
            }
     
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                base.OnAuthorization(filterContext);
     
                if (filterContext.Result is HttpUnauthorizedResult)
                {
                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                                                                    {
                                                                        { "lang", filterContext.RouteData.Values["lang"] },
                                                                        { "controller", "DashBoard" },
                                                                        { "action", "Index" },
                                                                        { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                                                                    });
                }
            }
    bon, j'avoue que j'avance à l'aveugle. Qui peut m'aider svp ? J'ai vraiment besoin d'avancer ! :/

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    J'ai réussi ! :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
     
    namespace LivDevis.Filters
    {
        public class AuthorizeUnauthentificated : AuthorizeAttribute
        {
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                return (!httpContext.User.Identity.IsAuthenticated);
            }
     
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                if (filterContext == null)
                {
                    throw new ArgumentNullException("filterContext");
                }
     
                if (!AuthorizeCore(filterContext.HttpContext))
                {
                    HandleUnauthorizedRequest(filterContext);
                }
            }
     
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                                                                {
                                                                    { "lang", filterContext.RouteData.Values["lang"] },
                                                                    { "controller", "DashBoard" },
                                                                    { "action", "Index" },
                                                                    { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                                                                });
     
            }
        }
     
        public class AuthorizeAuthentificated : AuthorizeAttribute
        {
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                return (httpContext.User.Identity.IsAuthenticated);
            }
     
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                if (filterContext == null)
                {
                    throw new ArgumentNullException("filterContext");
                }
     
                if (!AuthorizeCore(filterContext.HttpContext))
                {
                    HandleUnauthorizedRequest(filterContext);
                }
            }
     
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                                                                {
                                                                    { "lang", filterContext.RouteData.Values["lang"] },
                                                                    { "controller", "Home" },
                                                                    { "action", "Index" },
                                                                    { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                                                                });
     
            }
        }
    }

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/11/2007, 10h57
  2. [VB]Login automatique par VBA sous BO
    Par richardprod dans le forum SDK
    Réponses: 4
    Dernier message: 16/02/2007, 15h55
  3. login automatique via url
    Par Groovygirl dans le forum ASP
    Réponses: 3
    Dernier message: 23/06/2006, 11h59
  4. [débutant] Problème pour générer un login automatiquement
    Par zamoto dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/05/2006, 20h12
  5. [Cookies] problème cookie login automatique
    Par t-die dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2006, 16h48

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