He hecho esto antes con MVC5 usando User.Identity.GetUserId()
pero eso no parece funcionar aquí. El User.Identity
no tiene el GetUserId()
método
estoy usando Microsoft.AspNet.Identity
He hecho esto antes con MVC5 usando User.Identity.GetUserId()
pero eso no parece funcionar aquí. El User.Identity
no tiene el GetUserId()
método
estoy usando Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Respuestas:
Actualización en ASP.NET Core Version> = 2.0
En el controlador:
En alguna otra clase:
Entonces debe registrarse
IHttpContextAccessor
en laStartup
clase de la siguiente manera:Para mayor legibilidad, escriba los métodos de extensión de la siguiente manera:
Luego use de la siguiente manera:
fuente
null
.User.Identity.Name
, podría deberse a que la autenticación anónima está habilitada. PudeUser.Identity.Name
devolver mi dominio y nombre de usuario expandiéndomeProperties > launchSettings.json
y configurándomeanonymousAuthentication
enfalse
ywindowsAuthentication
paratrue
.Hasta ASP.NET Core 1.0 RC1 :
Es User.GetUserId () del espacio de nombres System.Security.Claims .
Desde ASP.NET Core 1.0 RC2 :
Ahora tiene que usar UserManager . Puede crear un método para obtener el usuario actual:
Y obtenga información del usuario con el objeto:
Nota: Puede hacerlo sin usar un método que escriba líneas individuales como esta
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, pero no respeta el principio de responsabilidad única. Es mejor aislar la forma en que obtiene al usuario porque si algún día decide cambiar su sistema de administración de usuarios, como usar otra solución que no sea Identity, se volverá doloroso ya que debe revisar todo el código.fuente
puedes obtenerlo en tu controlador:
o escriba un método de extensión como antes .Core v1.0
y llegar a donde esté disponible el usuario ClaimsPrincipal :
fuente
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
para obtener un UserId enteroIncluí el uso de System.Security.Claims y pude acceder al método de extensión GetUserId ()
NB: ya tenía Microsoft.AspNet.Identity usando pero no pude obtener el método de extensión. Supongo que ambos deben usarse en conjunto
EDITAR : Esta respuesta ahora está desactualizada. Mire la respuesta de Soren o Adrien para obtener una forma anticuada de lograr esto en CORE 1.0
fuente
var userId = User.GetUserId();
Solo para .NET Core 2.0 Se requiere lo siguiente para obtener el ID de usuario del usuario conectado en una
Controller
clase:o
p.ej
fuente
Como se indicó en alguna parte de esta publicación, el método GetUserId () se ha movido al UserManager.
Si comenzó un proyecto vacío, es posible que deba agregar el UserManger a sus servicios en startup.cs. De lo contrario, este ya debería ser el caso.
fuente
debes importar Microsoft.AspNetCore.Identity & System.Security.Claims
fuente
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
aUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Aunque la respuesta de Adrien es correcta, puede hacer todo esto en una sola línea. No hay necesidad de funciones adicionales o desorden.
Funciona, lo comprobé en ASP.NET Core 1.0
entonces puede obtener otras propiedades de la variable como
user.Email
. Espero que esto ayude a alguien.fuente
Para ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identity 2.0 api ( https://github.com/kkagill/ContosoUniversity-Backend ):
El
Id
fue cambiado aUser.Identity.Name
Respuesta:
fuente
this.User.Identity.Name
embargo , según mi prueba, tiende a ser el nombre de usuario. En mi prueba, el nombre de usuario es un correo electrónico, ya sea que el usuario inicie sesión desde el registro o inicie sesión desde un inicio de sesión externo (por ejemplo, Facebook, Google). El siguiente código devuelve el ID de usuario. Utilizo una clave primaria de incremento automático para mi tabla de usuario de identidad, de ahí el int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
no funciona ya que está proporcionando un nombre de usuario. Funciona cuando lo reemplazas porFindByNameAsync
.en el
APiController
Algo como esto obtendrá los reclamos
fuente
User.Identity.GetUserId ();
no existe en asp.net identity core 2.0. En este sentido, me las he arreglado de manera diferente. He creado una clase común para usar toda la aplicación, debido a la obtención de información del usuario.
crear una clase común PCommon e interfaz IPCommon agregando referencia
using System.Security.Claims
Aquí la implementación de la clase común
obtener userId y name en la acción de inserción
Gracias Maksud
fuente
Para obtener la identificación de usuario actual en las vistas de afeitar, podemos inyectar UserManager en la vista de esta manera:
Espero que le sea útil.
fuente
uso puede usar
por alguna razón, NameIdentifier ahora recupera el nombre de usuario (.net core 2.2)
fuente
Como administrador que trabaja en el perfil de otras personas y necesita obtener el Id. Del perfil en el que está trabajando, puede usar una ViewBag para capturar el Id, por ejemplo, ViewBag.UserId = userId; mientras userId es el parámetro de cadena del método en el que está trabajando.
fuente
Si desea esto en ASP.NET MVC Controller, use
Necesita agregar una
using
declaración porqueGetUserId()
no estará allí sin ella.fuente
User.GetUserId()
y noUser.Identity.GetUserId()