web-dev-qa-db-ja.com

asp.netIDを持つ現在のユーザーのUserNameを変更した後に認証Cookieを変更する方法

Asp.netIDバージョン1.0.0-rc1とEntityFramework 6.0.0-rc1(Visual Studio 2013 RCに付属しているもの)を使用します。

ユーザーにUserNameを変更する機会を与えようとしています。 AuthenticationIdentityManagerの下にはそのための関数がないようですので、EFを使用してデータを変更します(現在のユーザーのUserオブジェクトを取得し、UserNameを変更し、変更を保存します)。

問題は、認証Cookieが変更されないままであり、そのようなユーザーがいないため、次の要求が失敗することです。

過去のフォーム認証では、これを解決するために次のコードを使用しました。

var formsAuthCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var isPersistent = FormsAuthentication.Decrypt(formsAuthCookie.Value).IsPersistent;
FormsAuthentication.SetAuthCookie(newUserName, isPersistent);

Cookieを更新するには、asp.net IDをどのように使用すればよいですか?

[〜#〜] update [〜#〜]

次のコードは、認証Cookieを更新しているようです。

var identity = new ClaimsIdentity(User.Identity);
identity.RemoveClaim(identity.FindFirst(identity.NameClaimType));
identity.AddClaim(new Claim(identity.NameClaimType, newUserName));
AuthenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant
    (new ClaimsPrincipal(identity), new AuthenticationProperties {IsPersistent = false});

残りの問題は、現在の認証CookieからIsPersistent値を抽出する方法です。

18
aleyush

Asp.Net MVC5 RTM Bits using AspNet.Identity? でユーザーをログイン/認証するにはどうすればよいですか?

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}

RC1の場合、同様のコードを使用できます。

AuthenticationManager.SignOut();
IdentityManager.Authentication.SignIn(AuthenticationManager, user.UserId, isPersistent:false);

永続的な値の場合、認証Cookieにアクセスしてステータスを取得する必要があります。

更新しました:

「Bearer」の代わりに使用される適切なAuthenticationTypeを使用します。また、サインインチケットを発行するときに、AuthenticationProperties.IsPersistentを設定していることを確認してください。

bool isPersistent=false;
var authContext = await Authentication.AuthenticateAsync("Bearer");
if (authContext != null)
{
   var aProperties = authContext.Properties;
   isPersistent = aProperties.IsPersistent;
}
16
jd4u