tutorial renderbody página plantillas para net método mvc llamado entre diseño diferencias asp asp.net-mvc forms-authentication authorization

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.