3

新しい Visual Studio 2013 Preview for Web を使用して、Web フォーム プロジェクトで現在のユーザーを取得しようとしています。Page.User を使用してユーザー名を取得できますが、ユーザー ID を取得しようとすると行き詰まります。彼らが開発したこの新しいアイデンティティモデルを使用しています。

これは私が持っているものです:

//Gets the correct username
string uname = User.Identity.Name;
//Returns a null object
Microsoft.AspNet.Identity.IUser user = IdentityConfig.Users.Find(uname);
//What I hope to call to add a user to a role
IdentityConfig.Roles.AddUserToRole("NPO", user.Id);
4

3 に答える 3

3

ASP.NET WebForms テンプレートに付属する既定のメンバーシップを使用している場合は、次のようにしてユーザーを取得する必要があります。

if (this.User != null && this.User.Identity.IsAuthenticated)
{
  var userName = HttpContext.Current.User.Identity.Name;
}

あなたが話している新しいモデルはですClaimsPrincipal。独自の違いは、このClaims Based Securyで、古いバージョンと完全に互換性がありますが、より強力です。

編集:

プログラムでユーザーを追加するにはRole、ユーザー名とロール名を渡してこれを行う必要があります。

if (this.User != null && this.User.Identity.IsAuthenticated)
{
  var userName = HttpContext.Current.User.Identity.Name;
  System.Web.Security.Roles.AddUserToRole(userName, "Role Name");    
}

新しいクレーム ベース セキュリティの使用

if (this.User != null && this.User.Identity.IsAuthenticated)
{
  var userName = HttpContext.Current.User.Identity.Name;
  ClaimsPrincipal cp = (ClaimsPrincipal)HttpContext.Current.User;

  GenericIdentity genericIdentity;
  ClaimsIdentity claimsIdentity;
  Claim claim;

  genericIdentity = new GenericIdentity(userName, "Custom Claims Principal");

  claimsIdentity = new ClaimsIdentity(genericIdentity);

  claim = new Claim(ClaimTypes.Role, "Role Name");
  claimsIdentity.AddClaim(claim);

  cp.AddIdentity(claimsIdentity);
}
于 2013-09-10T16:53:32.893 に答える