J'ai essayé de googler quelques choses sur les attributs personnalisés, mais je ne sais toujours pas comment s'y prendre ...
Je stocke quelques détails importants de l'utilisateur dans les cookies de session (ex UserID) une fois que l'utilisateur est connecté .. et tout ce que je veux faire est de créer un attribut où si le
if (Session["UserID"] == null)
puis il redirigera vers la connexion comme le fait l'attribut [Autoriser]. De cette façon, je peux appliquer cet attribut au niveau du contrôleur partout.
Dois-je remplacer l'attribut Autoriser? Créer un nouveau? Comment puis-je le rediriger pour me connecter également?
J'utilise également ASP.NET MVC 4
Merci pour toute aide
Vous pouvez créer un AuthorizeAttribute
personnalisé et remplacer AuthorizeCore()
et HandleUnauthorizedRequest()
selon vos besoins. Ajoutez votre propre logique qui fera la vérification et redirigera si nécessaire.
Je montre juste un exemple simple en utilisant le ActionFilterAttribute
de MVC (qui n'est pas le meilleur endroit pour faire l'authentification/l'autorisation)
public class VerifyUserAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = filterContext.HttpContext.Session["UserID"];
if (user == null)
filterContext.Result = new RedirectResult(string.Format("/User/Login?targetUrl={0}",filterContext.HttpContext.Request.Url.AbsolutePath));
}
}
N'oubliez pas de régler le Session["UserID"]
variable dans votre /User/Login
méthode d'action après validation de l'utilisateur.
Vous pouvez créer votre propre version de l'attribut Authorize
en implémentant l'interface IAuthorizationFilter
. Voici un exemple:
class MyCustomFilter : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Session["UserID"] == null)
{
filterContext.Result = new RedirectResult("/");
}
}
}
et un exemple d'utilisation:
[MyCustomFilter]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}