J'utilise Asp.Net Identity pour contrôler l'autorisation de mon application. Maintenant, je dois faire ceci: si l'utilisateur ne fonctionne pas dans 30 minutes, accédez à la page de connexion, lorsqu'il ne se connecte pas, cochez la case "isPersistent". Et, s'il a coché la case "isPersistent", définissez la date d'expiration du cookie sur 14 jours. J'essaie de le faire en modifiant le Startup.Auth.cs comme ceci:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});
}
et le code SignIn comme ceci:
private async Task SignInAsync(User user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
if (isPersistent)
{
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
else
{
AuthenticationManager.SignIn(new AuthenticationProperties() { ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddMinutes(30)) }, identity);
}
}
Mais j'ai constaté que lorsque l'utilisateur ne choisit pas la case à cocher isPersistent, la date d'expiration des cookies est déjà "Session", pas l'heure actuelle plus 30 minutes.
Le statut des cookies lorsque vous utilisez le code comme après, donc la case à cocher "Se souvenir de moi" ne peut pas fonctionner. :(.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(30),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});
Si la propriété IsPersistent
de AuthenticationProperties
est définie sur false, le délai d'expiration du cookie est défini sur Session.
Si case à cocher "se souvenir de moi" est coché alors AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity);
créera un cookie dont le délai d'expiration est égal à ExpireTimeSpan
que vous avez configuré dans Startup.cs
(Par défaut à 14 jours).
Si case à cocher "se souvenir de moi" est NON coché alors vous devez utiliser AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);
. Encore une fois, IsPersistent
est défini sur true, mais maintenant nous donnons une valeur à ExpiresUtc afin qu'il n'utilise pas de CookieAuthenticationOptions
de Startup.cs
.
public override async Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser)
{
var userIdentity = await CreateUserIdentityAsync(user).WithCurrentCulture();
// Clear any partial cookies from external or two factor partial sign ins
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie);
if (rememberBrowser)
{
var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id));
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity);
}
else
{
//AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity);
if (isPersistent)
{
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, userIdentity);
}
else
{
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30) }, userIdentity);
}
}
}
Utilisez ceci...
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(1),
});
}
J'ai eu le même problème et ce code a fonctionné pour moi (dans le fichier Startup.cs) ..
services.Configure<IdentityOptions>(options =>
{
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(9999);
});
Cela ajoute environ 27 ans (ou n'expire jamais) au cookie persistant.
NB: Si vous vouliez moins d'un délai d'expiration, vous pouvez utiliser TimeSpan.FromMinutes(1);
pendant 1 minute ou TimeSpan.FromSeconds(30);
pendant 30 secondes etc.