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?


¿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;.



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


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


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.


1
Me has salvado la vida
Sam Tubb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.