Asp.net Core Identityとエンティティフレームワークコアを使用して、UserIdプロパティでasp.Net Userオブジェクトを取得するにはどうすればよいですか?現在のログインユーザーをHttpContext.Userオブジェクトから取得するには、次の方法を使用できます。
UserManager.GetUserAsync(HttpContext.User)
ただし、管理者がログインしているときは、ユーザーのメールと電話番号を更新するために、ユーザーのデータにアクセス/変更できるようにしたいと考えています。これは、デフォルトではasp.Net Userオブジェクトの一部です。
理想的には、次のようなことができるようになりたいです。
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);