Obtener la identificación de usuario actual en ASP.NET Identity 2.0

81

Acabo de cambiar para usar la nueva versión 2.0 de Identity Framework. En 1.0 pude obtener un objeto de usuario usando manager.FindByIdAsync(User.Identity.GetUserId()). El GetUserId()método no parece existir en 2.0.

Ahora todo lo que puedo averiguar es usar manager.FindByEmailAsync(User.Identity.Name)las referencias al campo de nombre de usuario en la tabla de usuarios. En mi aplicación, esto se establece igual que el campo de correo electrónico.

Puedo ver que esto causa problemas en el futuro cuando alguien necesita actualizar su correo electrónico. ¿Hay alguna manera de obtener el objeto de usuario que ha iniciado sesión actual basándose en un valor que no cambia (como el campo de identificación) en Identity 2.0 Framework?

Jasonpresley
fuente
¿Cómo consiguió el UserId? ¿Puede avisarme? Me encuentro con el mismo problema.
Ammar Khan

Respuestas:

108

GetUserId()es un método de extensión activado IIdentityy está en Microsoft.AspNet.Identity.IdentityExtensions. Asegúrese de haber agregado el espacio de nombres con using Microsoft.AspNet.Identity;.

Anthony Chu
fuente
Ver también: stackoverflow.com/questions/20925822/…
Chris Patterson
2
Eso parece no funcionar con Identity 2. Cualquier sugerencia, por favor
Ammar Khan
2
Debería estar todavía allí. Estoy usando GetUserId () en mis proyectos de Identity 2 en este momento.
Anthony Chu
4
En Identity 3.0, esto parece haberse movido al espacio de nombres System.Security.Principal.
Sam
¿Existe algún método para obtener el rol de usuario actual? ¿Cuándo debo establecer el rol? Nota: Estoy usando un proveedor de almacenamiento personalizado ..
Jeeva Jsb
61

Para obtener CurrentUserId en Asp.net Identity 2.0, en la primera importación Microsoft.AspNet.Identity:

C#:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity


Y luego llama a User.Identity.GetUserId()donde quieras:

strCurrentUserId = User.Identity.GetUserId()

Este método devuelve el ID de usuario actual como el tipo de datos definido para el ID de usuario en la base de datos (el valor predeterminado es String).

Moshtaf
fuente
1
¿Podría decirme dónde puedo encontrar la DLL correspondiente para el espacio de nombres Microsoft.AspNet.Identity?
Franziee
14

En caso de que sea como yo y el campo Id de la entidad de usuario sea un Int o algo más que una cadena,

using Microsoft.AspNet.Identity;

int userId = User.Identity.GetUserId<int>();

hará el truco

Seth IK
fuente
4

Tuve el mismo problema. Actualmente estoy usando Asp.net Core 2.2. Resolví este problema con el siguiente código.

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

Espero que esto le sea útil a alguien.

Mohsin
fuente
1
Me has salvado la vida
Sam Tubb