我正在研究ASP.NET MVC项目中的登录功能。
我的应用程序中有两种情况:
-
如果记住我是错误的,并且没有互动15分钟,那么我应该注销用户。
-
如果记住我是真的,那么几分钟后我就不应该注销用户,然后在5小时后清除cookie。
我在互联网上进行了很多搜索,并修改了我的app.UseCookieAuthentication
:
它在15分钟之后会在会议上过期,无论我是否真的是真的?我究竟做错了什么?
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
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>(
validateInterval: TimeSpan.FromMinutes(500),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)
)
},
SlidingExpiration = true,
ExpireTimeSpan = TimeSpan.FromMinutes(15)
});
是由于这一行:
ExpireTimeSpan = TimeSpan.FromMinutes(15)
这意味着您的cookie将始终 15分钟后到期。
您需要检查用户提交登录表格的位置,如果他们选择了Remember me?
,则将ExpireTimeSpan
设置为5小时,否则将其设置为15分钟。
update
我不确定您的登录代码是什么样的,但是如果您想要不同的行为,具体取决于用户是否选择Remember me?
,则需要类似的内容:
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
});
更多详细信息和示例https://learn.microsoft.com/en-us/aspnet/core/core/security/authentication/cookie?tabs = aspnetcore2x