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
値を抽出する方法です。
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;
}