Asp.net Core按用户ID获取用户

big*_*ter 10 entity-framework-core asp.net-core asp.net-core-identity

使用Asp.net核心身份和实体框架核心,如何通过它的UserId属性获取asp.net用户对象?我知道可以使用以下方法从HttpContext.User对象获取当前登录用户:

UserManager.GetUserAsync(HttpContext.User)
Run Code Online (Sandbox Code Playgroud)

但是,当管理员登录时,我希望他们能够访问/修改任何用户的数据,以便更新用户电子邮件和PhoneNumbers,默认情况下,这些用户电子邮件和电话号码是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);
Run Code Online (Sandbox Code Playgroud)

但很明显,UserManager.GetUserById()方法目前不存在.

Kév*_*let 18

你可以用FindByIdAsync它:

var user = await _userManager.FindByIdAsync(model.userId);
Run Code Online (Sandbox Code Playgroud)


Dmi*_*lov 7

您可以通过以下方式之一获取当前用户:

// Get the current user ID from the user claims (no DB hit)    
int currentUserId = int.Parse(User.FindFirst(Claims.UserId).Value);
Run Code Online (Sandbox Code Playgroud)

然后检索当前用户实体:

// 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);
Run Code Online (Sandbox Code Playgroud)

或者就这样:

var currentUser = UserManager.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)