使用asp.net identity 2.0的MVC 5
我了解如何获取当前登录的用户ID。我需要获取系统中不同用户的用户ID。这是怎么做到的?
实施例。我需要获取用户名的用户ID" fsmith" ...
答案 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。没有在早期版本中尝试过。