アプリケーションコントローラでいつでもユーザーにクレームを追加/削除する必要があります。どのようにそれが可能であり、何のステップですか?コントローラでいつでもクレームを追加/削除する方法
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);
私はRC1にいるので、そこには「UserManager」はないと思います。また、私はASP.NETアイデンティティを使用していません。 – VSG24
はいあります。名前空間はMicrosoft.Asp.Net.Identity.UserManagerです。 –
あなたは間違っています。名前空間「Microsoft.Asp.Net」は存在しません。 Microsoft.AspNetがありますが、私はIdentityを使用していません。 – VSG24