获取用户名标识2.0的用户标识

时间:2014-12-29 13:38:50

标签: asp.net-mvc asp.net-identity

使用asp.net identity 2.0的MVC 5

我了解如何获取当前登录的用户ID。我需要获取系统中不同用户的用户ID。这是怎么做到的?

实施例。我需要获取用户名的用户ID" fsmith" ...

4 个答案:

答案 0 :(得分:29)

在AccountController中,您可以调用以下方法获取用户对象,然后获取用户ID。

var user = await UserManager.FindByNameAsync(userName);
var userId = user.Id;

如果您不在AccountController中,则可以使用以下代码获取UserManager参考

var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

答案 1 :(得分:3)

添加Shashi的有用答案......

如果您在帐户控制器内,则可以使用现有的UserManager:

var user = await UserManager.FindByNameAsync(userName);
var userId = user.Id;

在其他控制器中(可能选择其他可以使用HttpContext的地方),您可以创建一个用户管理器:

var um = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

但是我花了一段时间才意识到,你可以在最后一点找到它。例如,我在我的种子方法(在Configuration.cs中)使用它,所以我可以为另一个模型的User属性播种:

var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(*insert-your-db-context-here*));

答案 2 :(得分:1)

一种方法是使用用户管理器的FindByNameAsync方法(或其通用版本)。它采用用户的名称(在您的情况下&#34; fsmith&#34;)并返回用户对象的任务。此用户对象包含有关该用户的所有可用信息。

代码段可能类似于以下代码段(如果您正在寻找数据库ID):

var user = await UserManager.FindByNameAsync("fsmith");
var userId = user.Id;

修改

UserManager实例通常声明如下(请记住,有很多方法可以声明它,例如使用依赖注入时):

public AccountController()
  : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}

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

public UserManager<ApplicationUser> UserManager { get; private set; }

答案 3 :(得分:1)

如果您使用的是Bearing Token Auth,则上述示例不会返回应用程序用户。

相反,请使用:

ClaimsPrincipal currentUser = this.User;
var currentUserName = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
ApplicationUser user = await _userManager.FindByNameAsync(currentUserName);
return user.Id; 

这适用于apsnetcore 2.0。没有在早期版本中尝试过。