Asp.net Core Get User by User Id

会有一股神秘感。 提交于 2019-12-10 12:53:43

问题


Using Asp.net Core Identity and entity framework core, how can I get an asp.net user object by it's UserId property? I know it's possible to get the current logged in user from the HttpContext.User object using:

UserManager.GetUserAsync(HttpContext.User)

However when an admin is logged in, I want them to be able to access/modify any user's data in order to update user Emails and PhoneNumbers, which by default are part of the asp.net user object.

Ideally I'd like to be able to do something like:

var userRecord = _userManager.GetUserById(model.userId);
//update user record
userRecord.Email = model.Email;
userRecord.PhoneNumber = model.PhoneNumber;

var newRecord = await _userManager.UpdateAsync(userRecord);

but obvisously, the UserManager.GetUserById() method does not currently exist.


回答1:


You can use FindByIdAsync for that:

var user = await _userManager.FindByIdAsync(model.userId);



回答2:


You can get the current user one of this ways:

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

And then retrieve the current user entity:

// 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);

Or just this way:

var currentUser = UserManager.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);


来源:https://stackoverflow.com/questions/41350780/asp-net-core-get-user-by-user-id

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!