Get user id in ASP.NET Core 2

Assaf Our picture Assaf Our · Aug 9, 2018 · Viewed 9.7k times · Source

I'm trying to get the user id in an ASP.NET Core 2.1 MVC project.

However, I was only able to get the email. I'm almost sure there has to be a 1/2 line way to get it (in the ASP.NET MVC membership it was just var loggedInUserId = User.Identity.GetUserId();

I tried so far like this:

 var loggedInUserId = User.Identity.ToString();    // Result = Name (E-mail) 
 //  var loggedInUserId = User.Identity.Name;    // Result (E-mail)

& this is now what I need

Answer

Chris Pratt picture Chris Pratt · Aug 9, 2018

The old method of User.Identity.GetUserId() no longer exists, but the id is available as a claim on your principal, i.e. User. There's a number of ways you can get to it:

  1. The first and easiest is just pull out the claim:

    var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    
  2. If you already have an instance of UserManager<TUser> (or want to inject one), then you can use the GetUserId() method on that:

    var userId = _userManager.GetUserId(User);
    
  3. Finally, if you want the old way back, it's as simple as adding an extension to ClaimsPrincipal and utilize the first method above:

    public static class ClaimsPrincipalExtensions
    {
        public static string GetUserId(this ClaimsPrincipal principal) =>
            principal.FindFirstValue(ClaimTypes.NameIdentifier);
    }