Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    691
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : décembre 2007
    Messages : 691
    Points : 169
    Points
    169

    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 :
    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 :
    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 :
    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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    691
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : décembre 2007
    Messages : 691
    Points : 169
    Points
    169

    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 :
    [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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    691
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : décembre 2007
    Messages : 691
    Points : 169
    Points
    169

    Par défaut

    Pour atteindre mon objectif, je dois être capable de changer la valeur de :
    Code :
    FormsAuthenticationSettings.DefaultLoginUrl = "XXXX";
    Seulement on ne peut pas y mettre une valeur, il s’agit uniquement d'un accesseur ! :/

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

    Informations forums :
    Inscription : décembre 2007
    Messages : 691
    Points : 169
    Points
    169

    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 :
    [AuthorizeUnauthentificated]
    Pour les internautes connectés, en cas de refus d'accès à une page, retour à la page d'accueil du coté "connecté".
    Code :
    [AuthorizeAuthentificated]
    Un extrait de mon 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
    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
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    691
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : décembre 2007
    Messages : 691
    Points : 169
    Points
    169

    Par défaut

    J'ai réussi ! :
    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
    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.

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
  •