5

私はasp.net IDを使用しています。ユーザー ID を実装する既定の asp.net mvc アプリケーションを作成します。アプリケーションは HttpContext.User.Identity を使用してユーザー ID とユーザー名を取得します。

string ID = HttpContext.User.Identity.GetUserId();
string Name = HttpContext.User.Identity.Name;

AspNetUsers テーブルをカスタマイズできます。このテーブルにいくつかのプロパティを追加しましたが、これらのプロパティを HttpContext.User から取得できるようにしたいと考えています。それは可能ですか?可能であれば、どうすればよいですか?

4

1 に答える 1

8

この目的でクレームを使用できます。デフォルトの MVC アプリケーションには、システム内のユーザーを表すクラスに と呼ばれるメソッドがありますGenerateUserIdentityAsync。そのメソッド内には、というコメントがあります// Add custom user claims here。ここで、ユーザーに関する追加情報を追加できます。

たとえば、好きな色を追加したいとします。あなたはこれを行うことができます

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
    // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
    // Add custom user claims here
    userIdentity.AddClaim(new Claim("favColour", "red"));
    return userIdentity;
}

コントローラー内では、次のように( にある) にキャストUser.Identityすることで、クレーム データにアクセスできます。ClaimsIdentitySystem.Security.Claims

public ActionResult Index()
{
    var FavouriteColour = "";
    var ClaimsIdentity = User.Identity as ClaimsIdentity;
    if (ClaimsIdentity != null)
    {
        var Claim = ClaimsIdentity.FindFirst("favColour");
        if (Claim != null && !String.IsNullOrEmpty(Claim.Value))
        {
            FavouriteColour = Claim.Value;
        }
    }

    // TODO: Do something with the value and pass to the view model...

    return View();
}

クレームは Cookie に保存されるため、サーバーに一度ロードして入力すると、情報を取得するために何度もデータベースにアクセスする必要がなくなります。

于 2015-08-17T05:33:02.567 に答える