2009-07-28 6 views
0

Je suis en train d'implémenter une classe pour tous mes contrôleurs à hériter qui redirigera vers la page de connexion si l'utilisateur n'est pas authentifié. La ligne RedirectToAction ne redirige pas cependant. Pouvez-vous aider plesae corriger?Problème de redirection MVC

public class SecureController : Controller 
    { 
     public SecureController() 
     { 
      if (User == null || !User.Identity.IsAuthenticated) 
      { 
       RedirectToAction("Logon", "Account"); 
      } 
     } 
    } 

Répondre

1

Ma suggestion serait d'utiliser un ActionFilter à la place. Ce sera beaucoup plus facile. Vous pouvez faire quelque chose comme ceci:

public class RequiresAuthenticationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // You can do any custom authentication logic in here 

     if (User == null || !User.Identity.IsAuthenticated) 
     { 
      // This assumes that Account is the controller, and Logon is the action method. 
      // You might want to check your routes if this is still not working correctly 
      RedirectToAction("Logon", "Account"); 
     } 
    } 
} 

Cela vous permettra alors juste mettre un attribut sur votre méthode d'action dans votre contrôleur comme ceci:

[RequiresAuthentication] 
public ActionResult Index() 
{ 
    return View(); 
} 

Ou, comme d'autres l'ont souligné, si vous ne pas besoin de logique d'authentification personnalisée, vous pouvez simplement utiliser la AuthorizeAttribute.

[Authorize] 
public ActionResult Index() 
{ 
    return View(); 
} 
+2

qui est déjà construit Voir l'attribut Autorisez – terjetyl

+0

il fonctionne également mieux que celui-ci, car il supporte cach ing. –

+0

J'ai supposé qu'il devait faire l'authentification personnalisée puisqu'il allait dans la direction qu'il était. C'est le type d'attribut que j'utilise, je viens de substituer toute ma logique d'authentification personnalisée. – mkchandler

Questions connexes