usuarios tutorial proyectos proyecto permisos net mvc español autenticacion asp c# asp.net-mvc authentication principal

c# - tutorial - roles y permisos mvc 5



¿Cómo debo verificar si un usuario está autenticado en MVC5? (2)

He visto los siguientes dos booleanos accesibles:

  • System.Web.Mvc.Controller.User.Identity.IsAuthenticated
  • System.Web.Mvc.Controller.Request.IsAuthenticated

¿Hay alguna diferencia entre estos? Ambos parecen hacer lo mismo, así que no estoy seguro de qué usar.

Lo que me gustaría hacer es:

@if (User.Identity.IsAuthenticated) { if (User.IsInRole("Admin")) { @Html.ActionLink("Admin", "AdminController") } }

o

@if (Request.IsAuthenticated) { if (User.IsInRole("Admin")) { @Html.ActionLink("Admin", "AdminController") } }

¿Alguno de los anteriores funcionaría igual de bien?


La propiedad IsAuthenticated para determinar si la solicitud actual se ha autenticado. Si no se ha autenticado, la solicitud se redirige a otra página donde los usuarios pueden ingresar sus credenciales en la aplicación web. Esta es una técnica común utilizada en la página predeterminada para una aplicación.

pero cuando se trata de User.Identity.IsAuthenticated

La propiedad Usuario proporciona acceso programático a las propiedades y métodos de la interfaz IPrincipal. Como las páginas ASP.NET contienen una referencia predeterminada al espacio de nombres System.Web (que contiene la clase HttpContext), puede hacer referencia a los miembros de HttpContext en una página .aspx sin utilizar la referencia de clase totalmente calificada para HttpContext. Por ejemplo, puede usar User.Identity.Name para obtener el nombre del usuario en cuyo nombre se está ejecutando el proceso actual. Sin embargo, si desea utilizar los miembros de IPrincipal desde un módulo de código subyacente ASP.NET, debe incluir una referencia al espacio de nombres System.Web en el módulo y una referencia totalmente calificada tanto para el contexto de solicitud / respuesta activo como para el actual. la clase en System.Web que quieres usar Por ejemplo, en una página de código subyacente debe especificar el nombre completo


No hay diferencia La única diferencia es que si el usuario no está autenticado, User.Identity puede ser nulo y, por lo tanto, es posible que obtenga un NRE, mientras que con el segundo enfoque, internamente hay un control para esto y es más seguro.

Así es como se implementa el método Request.IsAuthenticated :

public bool IsAuthenticated { get { return this._context.User != null && this._context.User.Identity != null && this._context.User.Identity.IsAuthenticated; } }

Básicamente es un poco más seguro que el primero.