Get user id in ASP.NET Core 2

前端 未结 3 603
慢半拍i
慢半拍i 2021-01-12 03:19

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

相关标签:
3条回答
  • 2021-01-12 03:49

    You need to inject dependency in the controller like shown below:

    [Authorize]
    public class AccountController: Controller
    {
    private readonly UserManager<IdentityUser> _userManager;
    
        public AccountController(UserManager<IdentityUser> userManager) 
        {
            _userManager = userManager;
        }
    }
    

    Now, you can use below code anywhere inside that controller to get user details.

    var user = await _userManager.FindByEmailAsync(model.EmailID);
    

    Now, You can use user.Id to get userId.

    0 讨论(0)
  • 2021-01-12 03:52

    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);
      }
      
    0 讨论(0)
  • 2021-01-12 04:04

    In Asp.net Core 2.2, I solved this problem with the following piece of code.

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

    This way you will get the user information by his email. User.Identity.Name will provide you the email address of the current logged in user.

    I hope this will be useful to someone.

    0 讨论(0)
提交回复
热议问题