Pregunta Cómo obtener el ID de usuario actual conectado ASP.NET Core


He hecho esto antes con MVC5 usando User.Identity.GetUserId() pero eso no parece funcionar aquí. los User.Identity no tiene el GetUserId() método

estoy usando Microsoft.AspNet.Identity


74
2018-06-08 03:53


origen


Respuestas:


Hasta ASP.NET Core 1.0 RC1 :

Es User.GetUserId () de System.Security.Claims espacio de nombres

Desde ASP.NET Core 1.0 RC2 :

Ahora debes usar UserManager. Puede crear un método para obtener el usuario actual:

private Task<ApplicationUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);

Y obtenga información del usuario con el objeto:

var user = await GetCurrentUserAsync();

var userId = user?.Id;
string mail = user?.Email;

Nota : Puedes hacerlo sin usar un método que escriba líneas simples 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 obtienes al usuario, porque si algún día decides cambiar tu sistema de administración de usuarios, como usar otra solución que no sea Identity, será doloroso ya que tienes que revisar todo el código.


77
2018-02-01 10:31



puedes obtenerlo en tu controlador:

var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

o escribe un método de extensión como antes .Core v1.0

using System;
using System.Security.Claims;

namespace Shared.Web.MvcExtensions
{
    public static class ClaimsPrincipalExtensions
    {
        public static string GetUserId(this ClaimsPrincipal principal)
        {
            if (principal == null)
                throw new ArgumentNullException(nameof(principal));

            return principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        }
    }
}

y llegar a donde el usuario ClaimsPrincipal esté disponible :

using Microsoft.AspNetCore.Mvc;
using Shared.Web.MvcExtensions;

namespace Web.Site.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return Content(this.User.GetUserId());
        }
    }
}

47
2017-08-09 09:50



Incluí el uso de System.Security.Claims y pude acceder al método de extensión GetUserId ()

NB: Ya tenía el uso de Microsoft.AspNet.Identity pero no pude obtener el método de extensión. Así que supongo que ambos deben usarse en conjunción uno con el otro

using Microsoft.AspNet.Identity;
using System.Security.Claims;

EDITAR: Esta respuesta ahora está desactualizada. Mire la respuesta de Soren o Adrien para una forma anticuada de lograr esto en CORE 1.0


31
2018-06-08 05:32



Como se indica en alguna parte de esta publicación, el método GetUserId () se ha movido al UserManager.

private readonly UserManager<ApplicationUser> _userManager;

public YourController(UserManager<ApplicationUser> userManager)
{
    _userManager = userManager;
}

public IActionResult MyAction()
{
    var userId = _userManager.GetUserId(HttpContext.User);

    var model = GetSomeModelByUserId(userId);

    return View(model);
}

Si comenzó un proyecto vacío, es posible que deba agregar UserManger a sus servicios en startup.cs. De lo contrario, este debería ser el caso.


9
2017-10-22 07:41



Sólo para .NET Core 2.0 Se requiere lo siguiente para obtener el ID de usuario del usuario conectado en una Controller clase:

var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

o

var userId = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);

p.ej.

contact.OwnerID = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

9
2018-02-14 21:45



Aunque la respuesta de Adrien es correcta, puede hacer esto en una sola línea. No necesita funciones adicionales o desorden.

Funciona Lo comprobé en ASP.NET Core 1.0

var user = await _userManager.GetUserAsync(HttpContext.User);

entonces puedes obtener otras propiedades de la variable como user.Email. Espero que esto ayude a alguien.


4
2018-02-27 18:29



Para ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identity 2.0 api (https://github.com/kkagill/ContosoUniversity-Backend)

los Id fue cambiado a User.Identity.Name

    [Authorize, HttpGet("Profile")]
    public async Task<IActionResult> GetProfile()
    {
        var user = await _userManager.FindByIdAsync(User.Identity.Name);

        return Json(new
        {
            IsAuthenticated = User.Identity.IsAuthenticated,
            Id = User.Identity.Name,
            Name = $"{user.FirstName} {user.LastName}",
            Type = User.Identity.AuthenticationType,
        });
    }

Respuesta:

enter image description here


4
2018-03-08 10:00