Identity Frameworkの新しい2.0バージョンを使用するように切り替えました。 1.0では、manager.FindByIdAsync(User.Identity.GetUserId())
を使用してユーザーオブジェクトを取得できました。 GetUserId()
メソッドは2.0には存在しないようです。
これでわかるのは、usersテーブルのusernameフィールドを参照するmanager.FindByEmailAsync(User.Identity.Name)
を使用することだけです。私のアプリケーションでは、これはメールフィールドと同じに設定されています。
誰かがメールを更新する必要があるときに、これが原因で問題が発生することがわかります。 Identity 2.0 Frameworkで不変の値(idフィールドなど)に基づいて、現在ログインしているユーザーオブジェクトを取得する方法はありますか?
GetUserId()
はIIdentity
の拡張メソッドであり、Microsoft.AspNet.Identity.IdentityExtensions
にあります。 using Microsoft.AspNet.Identity;
で名前空間を追加したことを確認してください。
Asp.net Identity 2.0でCurrentUserIdを取得するには、最初にMicrosoft.AspNet.Identity
をインポートします。
C#:
using Microsoft.AspNet.Identity;
VB.NET:
Imports Microsoft.AspNet.Identity
そして、必要な場所でUser.Identity.GetUserId()
を呼び出します:
strCurrentUserId = User.Identity.GetUserId()
このメソッドは、データベース内のユーザーIDの定義済みデータ型として現在のユーザーIDを返します(デフォルトはString
です)。
あなたが私のようで、ユーザーエンティティのIdフィールドがIntまたは文字列以外の何かである場合に備えて、
using Microsoft.AspNet.Identity;
int userId = User.Identity.GetUserId<int>();
トリックをします
同じ問題がありました。現在、Asp.net Core 2.2を使用しています。次のコードでこの問題を解決しました。
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
これが誰かに役立つことを願っています。