ASP.NET Identity 2 记住我 - 用户正在注销
ASP.NET Identity 2 Remember Me - User Is Being Logged Out
我在我的 MVC5 应用程序中使用 Identity 2.1。
我将 PasswordSignInAsync 的 isPersistent 属性设置为 true 以启用 'Remember Me':
var result = await SignInManager.PasswordSignInAsync(model.Username,
model.Password,
true,
shouldLockout: false);
但是,如果我整晚都保持登录状态,那么当我早上刷新页面时,它会将我注销,我必须重新登录。
如何防止自动注销,直到用户手动注销?
是不是和身份使用的Cookie Authentication有关?我不太了解 Startup.Auth.cs.
中设置的 CookieAuthenticationOptions
new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
}
similar question中有TimeSpan
参数的解释。只需使用无限 cookie,如下所示:
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
这也是它正常工作所必需的:
致电
await UserManager.UpdateSecurityStampAsync(userId);
之前
AuthenticationManager.SignOut();
我认为你应该阅读 this article。有两个不同的间隔:ValidateInterval
和 ExpireTimeSpan
。在您的情况下,我认为您应该更改 expireTimeSpan
,而不是 ValidateInterval
。
我应该多写一点。这个奇怪的代码:
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
导致我的应用在 1 天后丢失 cookie。我真的不知道为什么,但是在排除此代码并向我的 web.config "remember me" 未来添加一个 mashine 键后终于可以正常工作了。
我当前的代码是:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromDays(5)
});
表单this post,isPersistent
参数设置身份验证会话是否跨多个请求保持。
我有这个问题。这是因为我的自定义 UserStore 没有实现 IUserSecurityStampStore。
public Task<string> GetSecurityStampAsync(IdentityUser user)
{
return Task.FromResult<string>(user.SecurityStamp);
}
如果没有安全标记,SecurityStampValidator 将无法验证任何内容,因此会注销用户。
我在我的 MVC5 应用程序中使用 Identity 2.1。 我将 PasswordSignInAsync 的 isPersistent 属性设置为 true 以启用 'Remember Me':
var result = await SignInManager.PasswordSignInAsync(model.Username,
model.Password,
true,
shouldLockout: false);
但是,如果我整晚都保持登录状态,那么当我早上刷新页面时,它会将我注销,我必须重新登录。 如何防止自动注销,直到用户手动注销?
是不是和身份使用的Cookie Authentication有关?我不太了解 Startup.Auth.cs.
中设置的 CookieAuthenticationOptionsnew CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
}
similar question中有TimeSpan
参数的解释。只需使用无限 cookie,如下所示:
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
这也是它正常工作所必需的:
致电
await UserManager.UpdateSecurityStampAsync(userId);
之前
AuthenticationManager.SignOut();
我认为你应该阅读 this article。有两个不同的间隔:ValidateInterval
和 ExpireTimeSpan
。在您的情况下,我认为您应该更改 expireTimeSpan
,而不是 ValidateInterval
。
我应该多写一点。这个奇怪的代码:
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user)
=> user.GenerateUserIdentityAsync(manager))
导致我的应用在 1 天后丢失 cookie。我真的不知道为什么,但是在排除此代码并向我的 web.config "remember me" 未来添加一个 mashine 键后终于可以正常工作了。
我当前的代码是:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromDays(5)
});
表单this post,isPersistent
参数设置身份验证会话是否跨多个请求保持。
我有这个问题。这是因为我的自定义 UserStore 没有实现 IUserSecurityStampStore。
public Task<string> GetSecurityStampAsync(IdentityUser user)
{
return Task.FromResult<string>(user.SecurityStamp);
}
如果没有安全标记,SecurityStampValidator 将无法验证任何内容,因此会注销用户。