c# asp.net-mvc-5 remember-me asp.net-identity-2

c# - Identidad 2 de ASP.NET Recordarme: el usuario está desconectado



asp.net-mvc-5 remember-me (4)

Estoy usando Identity 2.1 en mi aplicación MVC5. Estoy estableciendo la propiedad isPersistent de PasswordSignInAsync en verdadero para habilitar "Recordarme":

var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, true, shouldLockout: false);

Pero si permanezco conectado durante la noche, cuando actualizo la página por la mañana, me desconecta y tengo que volver a iniciar sesión. ¿Cómo evito el cierre de sesión automático hasta que el usuario cierre la sesión manualmente?

¿Tiene algo que ver con la Autenticación de cookies que usa la identidad? Realmente no entiendo las CookieAuthenticationOptions que están configuradas en Startup.Auth.cs.

new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) }


Debería escribir más. Este extraño código:

OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(0), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))

estaba causando que mi aplicación perdiera cookies después de 1 día. Realmente no sé por qué, pero después de excluir este código y agregar una clave mashine a mi web.config "recordarme", el futuro finalmente está funcionando bien.

Mi código actual es:

app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), ExpireTimeSpan = TimeSpan.FromDays(5) });


Hay una explicación para el parámetro TimeSpan en una pregunta similar . Simplemente usa las cookies infinitas, así:

OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(0), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))

Esto también es necesario para que funcione correctamente:

Llamada

await UserManager.UpdateSecurityStampAsync(userId);

antes de

AuthenticationManager.SignOut();


En esta publicación , el parámetro isPersistent establece si la sesión de autenticación persiste en varias solicitudes.


Creo que deberías leer este artículo . Hay dos intervalos diferentes: ValidateInterval y ExpireTimeSpan . Y en tu caso, creo que deberías cambiar el expireTimeSpan , no el ValidateInterval .