用户通过“记住我”退出
我似乎很难理解Identity 2.0和cookies的工作方式。 ASP.NET MVC 5。
我想要的是:如果用户登录并且他选中了“记住我”复选框,我不希望他永远退出..但会发生的是:用户在一定时间后退出。
如果用户在时间跨度之前关闭浏览器,则“记住我”function将起作用。 (当他重新打开网站时,他仍然登录。)
这是我登录的代码:
public async Task 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( validateInterval: TimeSpan.FromMinutes(10), regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager), getUserIdCallback: (id) => (id.GetUserId())) } });
所以我希望用户在5分钟后不会被注销,因为在PasswordSignInAsync函数中设置了isPersistent标志。
Thanx任何帮助。
这是一个已知的 错误 。
可以通过用您自己的代码替换SecurityStampValidator.OnValidateIdentity
来修复它 – 当重新生成cookie时,它忘记在新cookie中添加“RememberMe”属性,这使得新cookie不会持久化。
我认为这已经在v2.2中解决了,但是这个版本还没有用于生产。 遗憾的是,我现在找不到原始的错误报告。
- ASP.Net Identity 2 – 来自OAuthAuthorizationServerProvider的自定义响应
- ASP.Net Identity 2管理用户
- 了解MVC-5身份
- Asp.net身份entity framework数据库第一种方法有自己的表定义
- 无法从AspNetUsers表中检索inheritance的自定义属性值
- 用户(IPrincipal)在ApiController的构造函数上不可用,使用Web Api 2.1和Owin
- ASP.NET Identity 2 UserManager使所有用户都异步
- 针对ApplicationUser Roles导航属性的ASP MVC Build Throwing Warning?
- Asp.Net Identity和多种登录机制