Подтвердить что ты не робот

Как изменить файлы cookie для проверки подлинности после изменения UserName текущего пользователя с идентификатором asp.net

Использование asp.net identity version 1.0.0-rc1 с Entity Framework 6.0.0-rc1 (те, которые поставляются с Visual Studio 2013 RC).

Попытка дать пользователям возможность изменить их UserName. Кажется, нет функции для этого в AuthenticationIdentityManager, поэтому я изменяю данные с помощью EF (получаю пользовательский объект для текущего пользователя, изменяю UserName и сохраняю изменения).

Проблема заключается в том, что файлы cookie для проверки подлинности остаются неизменными, а следующий запрос завершается с ошибкой, поскольку такого пользователя нет.

С проверкой подлинности форм в прошлом я использовал следующий код для решения этой проблемы.

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

Что мне делать с идентификатором asp.net для обновления файлов cookie?

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});

Остальная проблема заключается в следующем: как извлечь IsPersistent значение из текущего файла cookie проверки подлинности?

4b9b3361

Ответ 1

Как вы входите в систему/аутентифицируете пользователя с битами RTM Asp.Net MVC5, используя 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 аутентификации и получить статус.

Обновлено:

Используйте соответствующий AuthenticationType, используемый вместо "Bearer". Также убедитесь, что при выдаче билета входа вы устанавливаете AuthenticationProperties.IsPersistent.

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