Asp.net Core Получить пользователя по идентификатору пользователя

Используя Asp.net Core Identity и ядро ​​entity framework, как я могу получить объект пользователя asp.net по его свойству UserId? Я знаю, что можно получить текущего зарегистрированного пользователя из объекта HttpContext.User, используя:

UserManager.GetUserAsync(HttpContext.User)

Однако, когда администратор входит в систему, я хочу, чтобы они могли получать доступ / изменять любые данные пользователя, чтобы обновлять электронные письма и номера телефонов пользователей, которые по умолчанию являются частью объекта пользователя 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 () в настоящее время не существует.


person big_water    schedule 27.12.2016    source источник


Ответы (2)


Для этого можно использовать FindByIdAsync:

var user = await _userManager.FindByIdAsync(model.userId);
person Kévin Chalet    schedule 27.12.2016

Получить текущего пользователя можно одним из следующих способов:

// 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);
person Dmitry Pavlov    schedule 25.09.2018
comment
Это помогло мне заполнить текущие данные Identity User в представлении. var currentUser = UserManager.Users.FirstOrDefault (u = ›u.UserName == User.Identity.Name); - person Pramil Gawande; 02.03.2019