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?

¿Fue útil?

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.HttpContext

     

Resumen:
  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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top