asp.net-mvc - renderbody - razor mvc
Cómo comprobar si el usuario está autorizado dentro de Acción. (4)
Cree un atributo como este: OnActionExecuting se ejecutará primero antes que otro código de la acción
public class IsAuthenticatedAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//do your validations here. and redirect to somewhere if needed.
filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
}
}
En cada acción donde necesite verificar, agregue un atributo como este:
[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
// no need to worry about checking here.
//do you action things
}
EDITAR: Este aún completa la acción y luego solo la redirige. No es tan útil.
Por lo general, protejo mis Acciones con [Authorize]
pero esta vez necesito verificar si un usuario está autorizado dentro de la acción.
P.ej
if(userIsAuthorized) {
//do stuff
}
else {
//return to login page
}
Creo que estoy usando ''Autenticación de formularios''
Esta pregunta es similar a this pero ninguna de las respuestas ofrecidas parece funcionar.
EDITAR: He hecho un poco más de excavación, parece que si me interrumpo en una Acción que tiene [Authorize]
, se establece el User.Identity, pero en Acciones sin él, el User.Identity está vacío, incluso si estoy conectado
Si solo quieres saber si el usuario ha iniciado sesión:
if (User.Identity.IsAuthenticated) { ... }
Si estás tratando de hacer algo específico de rol:
if (User.IsInRole("Administrators")) { ... }
La instancia de User
es una propiedad pública de la clase Controller
, por lo que siempre tendrá acceso a ella desde un Controlador que escriba. Si ningún usuario ha iniciado sesión, debe tener un GenericPrincipal
para el User
y un GenericIdentity
para el User.Identity
, así que no se preocupe por verificar los nulos.
Sugiero primero averiguar qué tipo de Autorización está usando. ;)
La respuesta que publicaste es correcta. Por lo que recuerdo, revisé el atributo [Autorizar] y el código ActionFilter relacionado. MVC llama internamente a Page.User.Identity.IsAuthenticated como esos ejemplos de código.
Request.IsAuthenticated
debería funcionar para lo que estás tratando de hacer.