web-dev-qa-db-ja.com

Asp.net CoreユーザーIDごとのユーザーの取得

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()メソッドは現在存在しません。

12
big_water

FindByIdAsyncを使用できます。

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

次のいずれかの方法で現在のユーザーを取得できます。

// 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);
1
Dmitry Pavlov