asp.net mvc 5 - mvc - Cómo cambiar las cookies de autenticación después de cambiar UserName del usuario actual con identidad asp.net
mvc 5 user identity (1)
¿Cómo inicia sesión / autentica a un usuario con Asp.Net MVC5 RTM usando 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);
}
Para RC1, puede usar el código similar.
AuthenticationManager.SignOut();
IdentityManager.Authentication.SignIn(AuthenticationManager, user.UserId, isPersistent:false);
Para obtener un valor persistente, debe acceder a la cookie de autenticación y recuperar el estado.
Actualizado:
Use AuthenticationType apropiado en lugar de "Bearer". También asegúrese de que al emitir el ticket de inicio de sesión, establezca AuthenticationProperties.IsPersistent.
bool isPersistent=false;
var authContext = await Authentication.AuthenticateAsync("Bearer");
if (authContext != null)
{
var aProperties = authContext.Properties;
isPersistent = aProperties.IsPersistent;
}
Utilizando asp.net identidad versión 1.0.0-rc1 con Entity Framework 6.0.0-rc1 (los que vienen con Visual Studio 2013 RC).
Intentando dar a los usuarios la oportunidad de cambiar su nombre de UserName
. Parece que no hay ninguna función para eso en AuthenticationIdentityManager
, así que cambio los datos usando EF (obtener el objeto de usuario para el usuario actual, cambiar UserName y guardar los cambios).
El problema es que las cookies de autenticación permanecen sin cambios, y la próxima solicitud falla ya que no hay tal usuario.
Con la autenticación de formularios en el pasado, utilicé el siguiente código para resolver esto.
var formsAuthCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var isPersistent = FormsAuthentication.Decrypt(formsAuthCookie.Value).IsPersistent;
FormsAuthentication.SetAuthCookie(newUserName, isPersistent);
¿Qué debo hacer con la identidad de asp.net para actualizar las cookies?
ACTUALIZAR
El siguiente código parece actualizar la cookie de autenticación.
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});
El problema restante es: ¿cómo extraer el valor IsPersistent
de la cookie de autenticación actual?