Я использую Asp.Net Identity для управления авторизацией моего приложения. Теперь мне нужно сделать следующее: если пользователь не работает в течение 30 минут, перейдите на страницу входа, когда он не устанавливает флажок "isPersistent". И, если он установил флажок "isPersistent", установите дату истечения срока действия cookie на 14 дней. Я пытаюсь сделать это, изменив Startup.Auth.cs следующим образом:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});
}
и код входа в систему, как это:
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);
}
}
Но я обнаружил, что когда пользователь не устанавливает флажок isPersistent, срок действия файлов cookie уже равен "Сеанс", а не текущему времени плюс 30 минут.
Состояние файлов cookie при использовании кода, как после, поэтому флажок "запомнить меня" не может работать. :(.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(30),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});