2008-11-04 33 views

Respuesta

233

Si usted necesita para obtener el usuario desde el controlador, utilice la propiedad User del controlador. Si lo necesita de la vista, rellenaría lo que necesita específicamente en el ViewData, o simplemente podría llamar al Usuario ya que creo que es una propiedad de ViewPage.

+2

"o simplemente puede llamar al Usuario porque creo que es propiedad de ViewPage" - ¿Quiere decir utilizar Page.user cuando está en la vista? – mawaldne

+14

Sí, puede usarlo como "Hola, @ User.Identity.Name!" en el cshtml. – Sean

16

que utilizo:

Membership.GetUser().UserName 

No estoy seguro de que esto funcionará en ASP.NET MVC, pero vale la pena un tiro :)

+0

dónde viene esta clase de membresía viene? IntelliSense no lo reconoce de manera predeterminada. –

+0

El espacio de nombres System.Web.Security. No estoy seguro de que esto sea útil en MVC, pero lo uso con los controles de inicio de sesión para formularios web. – Sean

+1

Es útil en cualquier aplicación ASP.NET que use los proveedores de Membresía. – jamiebarrow

53

Trate HttpContext.Current.User.

pública compartida propiedad actual() Como System.Web.HttpContext
miembro de System.Web.HttpContext

Resumen:
Obtiene o establece el objeto System.Web.HttpContext para el HTTP actual solicitud.

Valores de retorno:
El System.Web.HttpContext para el actual solicitud HTTP

+2

Aparentemente HttpContext no tiene una propiedad llamada "Actual". –

+19

Creo que ustedes dos están hablando de dos cosas diferentes. System.Web.HttpContext y la propiedad estática: System.Web.Mvc.Controller.HttpContext (que no tiene una propiedad "Actual". –

+1

Eso funcionó en un entorno que no es MVC, justo lo que necesitaba. ¡Gracias !:) – wdanda

20

me di cuenta que es muy viejo, pero me acaba de empezar con ASP.NET MVC, así que pensé que gustaría poner mi granito de arena en:

  • Request.IsAuthenticated le indica si el usuario es autenticado .
  • Page.User.Identity le da la identidad del usuario que ha iniciado sesión.
172

encontré que User obras, es decir, User.Identity.Name o User.IsInRole("Administrator").

+0

Gran ayuda. Estoy en MVC3 –

+13

Solo para agregar a esto, si estás trabajando en una clase fuera de un formulario necesitarás 'Imports System.Web' y calificar más con' HttpContext.Current.User.Identity.Name' o califica directamente usando la sintaxis completa: 'System.Web.HttpContext.Current.User.Identity.Name' – Paul

+0

Funciona dentro de un Controlador y si usa un ViewModel hereda de Controller o sigue la sugerencia de Paul. – usefulBee

11

cómo cerrar la sesión en nombre de usuario: System.Web.HttpContext.Current.User.Identity.Name

3
IPrincipal currentUser = HttpContext.Current.User; 
bool writeEnable = currentUser.IsInRole("Administrator") || 
     ... 
        currentUser.IsInRole("Operator"); 
4

Por lo que vale la pena, en ASP.NET MVC 3 sólo puede utilizar por el usuario que devuelve al usuario de la solicitud actual.

4

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 su propiedadLoginControlName.UserName.

MembershipUser u = Membership.GetUser(LoginUser.UserName); 
9

Para hacer referencia a una ID de usuario creada con autenticación simple integrada en ASP.NET MVC 4 en un controlador con fines de filtrado (que es útil si está utilizando primero la base de datos y Entity Framework 5 para generar enlaces primero y sus tablas están estructuradas para que se use una clave externa para el ID de usuario), puede usar

WebSecurity.CurrentUserId 

vez que se agrega una declaración utilizando

using System.Web.Security; 
+4

Desafortunadamente esto parece no funcionar más en MVC 5. No estoy seguro por qué =/ –

+1

Solo 'System.Security.Principal.WindowsIdentity.GetCurrent(). Name' funciona en' MVC 5'. Sin embargo, eso levanta el nombre de dominio con el nombre de usuario. es decir, dominio \ nombre de usuario – shaz

33

usted puede obtener el nombre del usuario en ASP.NET MVC4 así:

System.Web.HttpContext.Current.User.Identity.Name 
+4

Si obtiene este error ''System.Web.HttpContextBase' no contiene una definición para 'Actual' y ningún método de extensión 'Actual' aceptando un primer argumento de tipo 'System.Web.HttpContextBase' podría ser found', sugiero hacer una llamada absoluta como esta, 'System.Web.HttpContext.Current.User.Identity.Name'. –

2
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)); 
5

Utilice System.Security.Principal.WindowsIdentity.GetCurrent().Name.

Esto obtendrá el usuario actual de Windows conectado.

+1

Si bien este código puede responder la pregunta, sería mejor incluir algún contexto, explicar cómo funciona y describir cuándo usarlo. Las respuestas de solo código no son útiles a largo plazo. – ryanyuyu

+0

System.Security.Principal.WindowsIdentity.GetCurrent(). Name devuelve el usuario actual conectado a Windows, el OP está solicitando el usuario actualmente conectado al sitio web. – GrandMasterFlush

1

Si le sucede a estar trabajando en Active Directory en una intranet, he aquí algunos consejos:

(Windows Server 2012)

Ejecución de todo lo que habla a AD en un servidor web requiere un montón de cambios y paciencia. Dado que cuando se ejecuta en un servidor web frente a IIS/IIS Express local, se ejecuta en la identidad de la AppPool, por lo que debe configurarse para suplantar a quien acceda al sitio.

Cómo conseguir el actual usuario registrado 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... 

Usted debe envolver todas las llamadas que tienen que ver con 'contexto de directorio activo' en la siguiente por lo que está actuando como el entorno de alojamiento para obtener la información AD:

using (HostingEnvironment.Impersonate()){ ... } 

también debe tener impersonate conjunto de cierto en su web.config:

<system.web> 
    <identity impersonate="true" /> 

Debe tener la autenticación de Windows en web.config en:

<authentication mode="Windows" /> 
+0

¿Funciona esto cuando ? –

+0

No lo creo, ya que esto está usando explícitamente sus credenciales de usuario de Active Directory. ¿Por qué tendrías 'Formularios' si deseas que tus usuarios se autentiquen a través de AD? –

+0

En nuestra organización, hay ubicaciones en las que tenemos un par de estaciones de trabajo compartidas por varios empleados de "campo". Por eso, estamos obligados a agregar la página de inicio de sesión a nuestras aplicaciones web de Intranet. –

5

username por:

User.Identity.Name 

Pero si usted necesita para obtener sólo el ID, puede utilizar:

using Microsoft.AspNet.Identity; 

Por lo tanto, puede obtener directamente el ID de usuario:

User.Identity.GetUserId(); 
+0

Este método devuelve un ** System.Guid ** –

+0

User.Identity.Name es una instancia de System.Security.Principal.IPrincipal que no tiene una propiedad de id ... ¿Es este usuario diferente de User.Identity.GetUserId ' s Objeto de usuario – Samra

1

Puede utilizar siguiente código:

Request.LogonUserIdentity.Name; 
1

En Asp.net MVC Identidad 2, se puede obtener el nombre de usuario actual por:

var username = System.Web.HttpContext.Current.User.Identity.Name; 
1

Podemos utilizar siguiente código para obtener el usuario registrado actualmente en ASP.MVC neto:

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' 
Cuestiones relacionadas