Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Web avec .NET > ASP.NET MVC
ASP.NET MVC Forum d'entraide sur le développement de site web avec le framework ASP.NET MVC.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/12/2012, 09h10   #1
thor76160
Membre habitué
 
Inscription : décembre 2007
Messages : 683
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 683
Points : 146
Points : 146
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 :
Citation:
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 .
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 10h42   #2
thor76160
Membre habitué
 
Inscription : décembre 2007
Messages : 683
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 683
Points : 146
Points : 146
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.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 11h38   #3
thor76160
Membre habitué
 
Inscription : décembre 2007
Messages : 683
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 683
Points : 146
Points : 146
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 ! :/
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 13h51   #4
thor76160
Membre habitué
 
Inscription : décembre 2007
Messages : 683
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 683
Points : 146
Points : 146
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 ! :/
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 15h06   #5
thor76160
Membre habitué
 
Inscription : décembre 2007
Messages : 683
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 683
Points : 146
Points : 146
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 }
                                                            });
 
        }
    }
}
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h28.


 
 
 
 
Partenaires

Hébergement Web