У меня есть приложение ASP.NET MVC 5
, использующее ASP.NET Identity 2.1.0
для аутентификации пользователей.
Раньше все работало нормально, но теперь я обнаружил, что постоянные сеансы пользователей больше не работают. Я не могу сказать, какое изменение сломало это, но это сработало, когда я реализовал Identity (конвертировал приложение из SimpleMembership
), и это моя логика, которая у меня есть на данный момент:
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: true);
SignInManager
— это мой ApplicationSignInManager
, основанный на SignInManager<ApplicationUser, int>
, а model.RememberMe
— это true
.
И моя установка:
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = ApplicationCookieIdentityValidator.OnValidateIdentity(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
Все работает нормально, кроме сохранения пользовательских сессий. Я проверил файлы cookie, возвращаемые моим сервером, и .AspNet.ApplicationCookie
всегда возвращается как «действительный для текущего сеанса», а не какая-то дата в будущем. Поэтому, когда я закрываю и снова открываю браузер, мне нужно снова войти в систему...
Кто-нибудь знает, почему это не работает (больше)?
P.S.: Я переопределил SignInAsync
в своем ApplicationSignInManager
, потому что я делаю там некоторую пользовательскую логику, но я даже проверил с помощью отладчика и для следующего вызова:
await base.SignInAsync(user, isPersistent, rememberBrowser);
isPersistent
равно true
, поэтому он должен создать постоянный файл cookie.
validateInterval: TimeSpan.FromMinutes(0)
может быть причиной этого. Потому что при каждом запросе он регенерирует куки и устанавливает новый. Попробуйте установитьvalidateInterval
на что-то большее, чем 0, и посмотрите, сработает ли это. - person trailmax   schedule 09.09.2014