Asp.net Core按用戶ID獲取用戶

asp.net-core asp.net-core-identity entity-framework-core

使用Asp.net核心身份和實體框架核心,如何通過它的UserId屬性獲取asp.net用戶對象?我知道可以使用以下方法從HttpContext.User對象獲取當前登錄用戶:

UserManager.GetUserAsync(HttpContext.User)

但是,當管理員登錄時,我希望他們能夠訪問/修改任何用戶的數據,以便更新用戶電子郵件和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);

但很明顯,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);


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow