获取 ASP.NET Core 2 中的用户 ID

Get user id in ASP.NET Core 2

我正在尝试获取 ASP.NET Core 2.1 MVC 项目中的用户 ID。

但是,我只能收到邮件。我几乎可以肯定必须有 1/2 行的方式来获取它(在 ASP.NET MVC 成员中它只是 var loggedInUserId = User.Identity.GetUserId();

到目前为止我试过这样的:

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

&这就是我现在需要的

您需要在控制器中注入依赖项,如下所示:

[Authorize]
public class AccountController: Controller
{
private readonly UserManager<IdentityUser> _userManager;

    public AccountController(UserManager<IdentityUser> userManager) 
    {
        _userManager = userManager;
    }
}

现在,您可以在该控制器内的任何位置使用以下代码来获取用户详细信息。

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

现在,您可以使用 user.Id 来获取 userId。

User.Identity.GetUserId() 的旧方法不再存在,但 id 可作为对您的委托人的声明,即 User。您可以通过多种方式获得它:

  1. 第一个也是最简单的方法就是提出声明:

    var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    
  2. 如果你已经有一个 UserManager<TUser> 的实例(或者想注入一个),那么你可以在上面使用 GetUserId() 方法:

    var userId = _userManager.GetUserId(User);
    
  3. 最后,如果你想回到原来的方式,很简单,只需在 ClaimsPrincipal 上添加一个扩展,然后使用上面的第一种方法:

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

在Asp.net Core 2.2中,我用下面的代码解决了这个问题。

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

这样你就可以通过他的邮箱得到用户信息。 User.Identity.Name 将为您提供当前登录用户的电子邮件地址。

我希望这对某人有用。