2012-11-09 4 views
0

J'ai juste besoin de faire un autentication manuel sur MVC3 et le problème est, lorsque l'accès utilisateur l'URL du projet, j'ai ce code sur la classe de base:MVC3 d'authentification Manuel

public class BaseController : Controller 
{ 
    private Usuario loggedUser; 
    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     if (requestContext.HttpContext.Request.RawUrl != "/Home/Login") 
     { 
      if (requestContext.HttpContext.Session["usuario"] != null) 
      { 
       loggedUser = (Usuario)requestContext.HttpContext.Session["usuario"]; 
       ViewBag.nomeUsuario = loggedUser.Nome; 
       ViewBag.idUsuario = loggedUser.Id; 
      } 
      else 
      { 
       requestContext.HttpContext.Response.RedirectPermanent("~/Home/Login"); 
      } 
     } 
     base.Initialize(requestContext); 
    } 

Le problème est, quand ils ne sont pas autorisés J'envoie une redirection MAIS l'initialisation continue à traiter l'action de demande. Je pense que la validation n'est pas un bon endroit car je peux supprimer la méthode inicalize.

+3

Pensez à utiliser une coutume 'FilterAttribute', comme' AuthorizeAttribute', mais créer votre propre et le mettre sur le 'BaseController' ou quel que soit le contrôleur dont vous avez besoin sur la fonctionnalité. –

+0

Mario, j'ai regardé AuthorizeAttribute, mais j'ai besoin de créer ceci sans l'adhésion de Microsoft, sans utiliser la fonctionnalité d'authentification de MS. –

+0

Vous pouvez hériter de 'AuthorizeAttribute' et remplacer la fonctionnalité pour utiliser votre propre logique. –

Répondre

0

La redirection ne fonctionne pas dans ce contexte. Essayez de surcharger OnAuthorization et renvoyez un RedirectResult.

Encore mieux serait de mettre en œuvre cette logique en tant qu'attribut.

public class MyAuthorize : AuthorizeAttribute 
{ 
    private Usuario loggedUser; 
    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.RawUrl != "/Home/Login") 
     { 
      if (filterContext.HttpContext.Session["usuario"] != null) 
      { 
       loggedUser = (Usuario) filterContext.HttpContext.Session["usuario"]; 
       ViewBag.nomeUsuario = loggedUser.Nome; 
       ViewBag.idUsuario = loggedUser.Id; 
      } 
      else 
      { 
       filterContext.Result = new RedirectResult("~/Home/Login"); 
      } 
      base.OnAuthorization(filterContext); 
     } 
    } 
} 
+0

Super! Merci beaucoup, mais la séquence de mvc3 non est .. - Exécuter - Initialiser - ExecuteCore –