【问题标题】:Asp.net Core Get User by User IdAsp.net Core 通过用户 ID 获取用户
【发布时间】:2017-05-12 01:43:06
【问题描述】:

使用 Asp.net Core Identity 和实体框架核心,我如何通过它的 UserId 属性获取 asp.net 用户对象?我知道可以使用以下方法从 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() 方法当前不存在。

【问题讨论】:

    标签: asp.net-core entity-framework-core asp.net-core-identity


    【解决方案1】:

    您可以为此使用FindByIdAsync

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这有助于我在视图中填充当前的身份用户数据。 var currentUser = UserManager.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多