Asp.net 核心通过用户ID获取用户
Asp.net Core Get User by User Id
使用 Asp.net Core Identity 和 entity framework core,如何通过 UserId 属性 获取 asp.net 用户对象?我知道可以使用以下方法从 HttpContext.User 对象获取当前登录用户:
UserManager.GetUserAsync(HttpContext.User)
但是,当管理员登录时,我希望他们能够 access/modify 任何用户的数据,以便更新用户电子邮件和电话号码,默认情况下它们是 asp.net 用户的一部分对象。
理想情况下,我希望能够执行以下操作:
var userRecord = _userManager.GetUserById(model.userId);
//update user record
userRecord.Email = model.Email;
userRecord.PhoneNumber = model.PhoneNumber;
var newRecord = await _userManager.UpdateAsync(userRecord);
但显然,UserManager.GetUserById() 方法当前不存在。
你可以使用 FindByIdAsync
:
var user = await _userManager.FindByIdAsync(model.userId);
您可以通过以下方式之一获取当前用户:
// Get the current user ID from the user claims (no DB hit)
int currentUserId = int.Parse(User.FindFirst(Claims.UserId).Value);
然后检索当前用户实体:
// Either via DB context:
var currentUser = _context.Users.FirstOrDefault(u => u.Id == currentUserId);
// or via Usermanager:
var sameUser = UserManager.Users.FirstOrDefault(u => u.Id == currentUserId);
或者这样:
var currentUser = UserManager.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
使用 Asp.net Core Identity 和 entity framework core,如何通过 UserId 属性 获取 asp.net 用户对象?我知道可以使用以下方法从 HttpContext.User 对象获取当前登录用户:
UserManager.GetUserAsync(HttpContext.User)
但是,当管理员登录时,我希望他们能够 access/modify 任何用户的数据,以便更新用户电子邮件和电话号码,默认情况下它们是 asp.net 用户的一部分对象。
理想情况下,我希望能够执行以下操作:
var userRecord = _userManager.GetUserById(model.userId);
//update user record
userRecord.Email = model.Email;
userRecord.PhoneNumber = model.PhoneNumber;
var newRecord = await _userManager.UpdateAsync(userRecord);
但显然,UserManager.GetUserById() 方法当前不存在。
你可以使用 FindByIdAsync
:
var user = await _userManager.FindByIdAsync(model.userId);
您可以通过以下方式之一获取当前用户:
// Get the current user ID from the user claims (no DB hit)
int currentUserId = int.Parse(User.FindFirst(Claims.UserId).Value);
然后检索当前用户实体:
// Either via DB context:
var currentUser = _context.Users.FirstOrDefault(u => u.Id == currentUserId);
// or via Usermanager:
var sameUser = UserManager.Users.FirstOrDefault(u => u.Id == currentUserId);
或者这样:
var currentUser = UserManager.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);