2014-12-02 4 views
3

У меня, похоже, есть проблемы с пониманием того, как работают Identity 2.0 и файлы cookie. ASP.NET MVC 5.Пользователь выйдет из системы с 'Запомнить меня'

Что я хочу: Если пользователь входит в систему, и он проверяет флажок «Запомнить меня», я не хочу, чтобы он выходил из системы когда-либо. Но что происходит: пользователь выйдет из системы через определенный промежуток времени.

Функция «Запомнить меня» работает, если пользователь закрывает браузер до перерыва. (Когда он вновь открывает сайт, он по-прежнему регистрируется в.)

Это код, у меня есть для входа в систему:

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // Require the user to have confirmed their email before they can log on. 
     var user = await UserManager.FindByNameAsync(model.Email); 
     if (user != null) 
     { 
      if (!await UserManager.IsEmailConfirmedAsync(user.Id)) 
      { 
       await SendEmailConfirmationTokenAsync(user.Id); 

       ModelState.AddModelError("", "Gelieve eerst je e-mailadres te bevestigen."); 
       return View(model); 
      } 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       return RedirectToLocal(returnUrl); 
      case SignInStatus.LockedOut: 
       return View("Lockout"); 
      case SignInStatus.Failure: 
      default: 
       ModelState.AddModelError("", "Ongeldige aanmeldpoging."); 
       return View(model); 
     } 
} 

И это код в Startup.Auth:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     ExpireTimeSpan = TimeSpan.FromMinutes(5), 
     Provider = new CookieAuthenticationProvider 
     { 
      // Enables the application to validate the security stamp when the user logs in. 
      // This is a security feature which is used when you change a password or add an external login to your account. 

      OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
       validateInterval: TimeSpan.FromMinutes(10), 
       regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager), 
       getUserIdCallback: (id) => (id.GetUserId<int>())) 
     } 
}); 

Поэтому я ожидаю, что пользователь не выйдет из системы через 5 минут, потому что флаг isPersistent установлен в функции PasswordSignInAsync.

Thanx для любой помощи.

ответ

1

Это knownbug.

Это может быть исправлено путем замены SecurityStampValidator.OnValidateIdentity на ваш собственный код - при сгенерировании файла cookie он забывает добавить свойство «RememberMe» в новый файл cookie, и это делает новый cookie не постоянным.

Я думаю, что это было решено в версии 2.2, но эта версия еще не выпущена. И, к сожалению, я не могу найти исходный отчет об ошибке для этого сейчас.

Смежные вопросы