web-dev-qa-db-ja.com

ASP.NET Identity 2.0で現在のユーザーIDを取得する

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フィールドなど)に基づいて、現在ログインしているユーザーオブジェクトを取得する方法はありますか?

73
jasonpresley

GetUserId()IIdentityの拡張メソッドであり、Microsoft.AspNet.Identity.IdentityExtensionsにあります。 using Microsoft.AspNet.Identity;で名前空間を追加したことを確認してください。

95
Anthony Chu

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です)。

53
Moshtaf

あなたが私のようで、ユーザーエンティティのIdフィールドがIntまたは文字列以外の何かである場合に備えて、

using Microsoft.AspNet.Identity;

int userId = User.Identity.GetUserId<int>();

トリックをします

12
Seth IK

同じ問題がありました。現在、Asp.net Core 2.2を使用しています。次のコードでこの問題を解決しました。

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

これが誰かに役立つことを願っています。

0
Mohsin