2016-04-28 11 views
1

アプリケーションコントローラでいつでもユーザーにクレームを追加/削除する必要があります。どのようにそれが可能であり、何のステップですか?コントローラでいつでもクレームを追加/削除する方法

ASP.NET CORE RC1を使用し、Microsoft.AspNet.Authorizationを使用しています。例えば

public IActionResult ChangeUserInfo(int id, User user) 
{ 
    var mUser = db.Users.Where(d => d.UserId == id).First(); 
    mUser.Email = user.Email; 

    // change claims, How? 

    db.SaveChanges(); 

    return View(); 
} 

I'm using the new Authentication API and NOT Identity!

編集:これは私が、追加の主張を取得claimsidentityにそれらを追加し、ユーザをログアウトしてからユーザーをログインするためになさ方法がある

もう一度やり直してもうまくいきません。

public async Task<IActionResult> SingInAsync(HttpContext httpContext, string rememberme, bool forceSingOut = false, List<System.Security.Claims.Claim> additionalClaims = null) 
     { 
      var userIdentity = new ClaimsIdentity("SecureLogin"); 
      userIdentity.AddClaims(_claims); 

      if(additionalClaims != null) 
      { 
       userIdentity.AddClaims(additionalClaims); 
      } 

      var userPrincipal = new ClaimsPrincipal(userIdentity); 

      if(forceSingOut) 
      { 
       await httpContext.Authentication.SignOutAsync("Cookie"); 
      } 

      await httpContext.Authentication.SignInAsync("Cookie", userPrincipal, 
       new AuthenticationProperties 
       { 
        ExpiresUtc = (rememberme != null) ? DateTime.UtcNow.AddDays(int.Parse(_config["AppOptions:RememberMeDuration"])) : DateTime.UtcNow.AddMinutes(20), 
        IsPersistent = false, 
        AllowRefresh = false, 
       }); 

      return null; 
     } 

を(これは、ユーザーが手動でログアウトした場合に動作します)し、それはのように呼ばれています:あなたが主張を削除この

public async Task<bool> AddClaim(string type, string value) 
    { 
     var username = User.GetUserName(); 
     var user = await _userManager.FindByNameAsync(username); 

     Claim claimToAdd = new Claim(type, value); 
     var result = await _userManager.AddClaimAsync(user, claimToAdd); 

     return result.Succeeded; 

    } 

のような主張を追加することができます

await customUserManager.SingInAsync(HttpContext, null, true, additClaims);

答えて

2

非常に似ています代わりに_userManager.RemoveClaimAsyncを使用するだけです。

_userManagerはUserManagerのインスタンスで、依存関係注入によってコントローラに注入します。

public ClaimController(UserManager<ApplicationUser> userManager, 
     RoleManager<IdentityRole> roleManager, 
     ILoggerFactory loggerFactory) 
    { 
     _userManager = userManager; 
     _roleManager = roleManager; 
     _logger = loggerFactory.CreateLogger<ClaimController>(); 
    } 
+0

私はRC1にいるので、そこには「UserManager」はないと思います。また、私はASP.NETアイデンティティを使用していません。 – VSG24

+0

はいあります。名前空間はMicrosoft.Asp.Net.Identity.UserManagerです。 –

+0

あなたは間違っています。名前空間「Microsoft.Asp.Net」は存在しません。 Microsoft.AspNetがありますが、私はIdentityを使用していません。 – VSG24