Cómo obtener el usuario actual en ASP.NET MVC
-
06-07-2019 - |
Pregunta
En un modelo de formularios, solía obtener el usuario conectado actualmente por:
Page.CurrentUser
¿Cómo consigo al usuario actual dentro de una clase de controlador en ASP.NET MVC?
Solución
Si necesita obtener al usuario desde el controlador, use la propiedad Usuario
del Controlador. Si lo necesita desde la vista, rellenaría lo que necesita específicamente en ViewData
, o simplemente puede llamar a User ya que creo que es una propiedad de ViewPage
.
Otros consejos
Descubrí que Usuario
funciona, es decir, User.Identity.Name
o User.IsInRole (" Administrador ")
.
Pruebe HttpContext.Current.User
.
Actual propiedad pública compartida () como System.Web.HttpContext
Miembro de System.Web.HttpContextResumen:
Obtiene o establece el objeto System.Web.HttpContext para la solicitud HTTP actual.Valores devueltos:
El System.Web.HttpContext para el actual Solicitud HTTP
Puede obtener el nombre del usuario en ASP.NET MVC4 de esta manera:
System.Web.HttpContext.Current.User.Identity.Name
Me doy cuenta de que esto es muy antiguo, pero recién estoy comenzando con ASP.NET MVC, así que pensé en meter mis dos centavos:
-
Request.IsAuthenticated
le dice si el usuario está autenticado. -
Page.User.Identity
le proporciona la identidad del usuario conectado.
Yo uso:
Membership.GetUser().UserName
No estoy seguro de que esto funcione en ASP.NET MVC, pero vale la pena intentarlo :)
inicio de sesión en nombre de usuario: System.Web.HttpContext.Current.User.Identity.Name
Para hacer referencia a una ID de usuario creada usando una autenticación simple integrada en ASP.NET MVC 4 en un controlador para fines de filtrado (lo cual es útil si está utilizando primero la base de datos y Entity Framework 5 para generar enlaces de código primero y sus tablas están estructurados para que se use una clave externa para el ID de usuario), puede usar
WebSecurity.CurrentUserId
una vez que agregue una declaración de uso
using System.Web.Security;
Nombre de usuario con:
User.Identity.Name
Pero si necesita obtener solo la ID, puede usar:
using Microsoft.AspNet.Identity;
Entonces, puede obtener directamente la ID de usuario:
User.Identity.GetUserId();
Esta página puede ser lo que estás buscando:
Uso de Page.User.Identity.Name en MVC3
Solo necesita User.Identity.Name
.
Utilice System.Security.Principal.WindowsIdentity.GetCurrent (). Name
.
Esto obtendrá el usuario de Windows con sesión iniciada actual.
Podemos usar el siguiente código para obtener el Usuario conectado actual en ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
También
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Por lo que vale, en ASP.NET MVC 3 puede usar el Usuario que devuelve al usuario para la solicitud actual.
Si está dentro de su página de inicio de sesión, en el evento LoginUser_LoggedIn, por ejemplo, Current.User.Identity.Name devolverá un valor vacío, por lo que debe usar la propiedad yourLoginControlName.UserName.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
var ticket = FormsAuthentication.Decrypt(
HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
if (ticket.Expired)
{
throw new InvalidOperationException("Ticket expired.");
}
IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));
Si está trabajando en Active Directory en una intranet, aquí hay algunos consejos:
(Windows Server 2012)
Ejecutar cualquier cosa que hable con AD en un servidor web requiere muchos cambios y paciencia. Dado que cuando se ejecuta en un servidor web frente a IIS / IIS Express local, se ejecuta en la identidad del AppPool, por lo que debe configurarlo para suplantar a quien visita el sitio.
Cómo obtener el usuario con sesión iniciada actual en un directorio activo cuando su aplicación ASP.NET MVC se ejecuta en un servidor web dentro de la red:
// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
var userContext = System.Web.HttpContext.Current.User.Identity;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...
Debe ajustar todas las llamadas que tengan que ver con el 'contexto de directorio activo' a continuación para que actúe como el entorno de alojamiento para obtener la información de AD:
using (HostingEnvironment.Impersonate()){ ... }
También debe tener suplantar
establecido en verdadero en su web.config:
<system.web>
<identity impersonate="true" />
Debe tener la autenticación de Windows activada en web.config:
<authentication mode="Windows" />
Puede usar el siguiente código:
Request.LogonUserIdentity.Name;
En Asp.net Mvc Identity 2, puede obtener el nombre de usuario actual:
var username = System.Web.HttpContext.Current.User.Identity.Name;
En el Administrador de IIS, en Autenticación, deshabilite: 1) Autenticación anónima 2) Autenticación de formularios
Luego agregue lo siguiente a su controlador, para manejar las pruebas versus la implementación del servidor:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;