也许我误解了它是如何工作的,但我认为在服务器的每个HTTP请求上都会调用OnValidateIdentity
。我看到它在初始登录时被击中(很多次,所以看起来它最初是每个HTTP请求),但是它似乎没有被再次调用。我让我的应用程序坐在那里,直到它应该过期,但在后续的服务器请求中再也不会被命中,直到我退出并再次登录。
我已将我的到期时间设置得非常低并关闭了滑动过期,看看我是否可以让它失败,但无济于事。
我是否应该看到每个HTTP请求都调用OnValidateIdentity
?最终,我真的只想要一个cookie过期导致注销。我假设我必须检查OnValidateIdentity
中每个请求的到期日期,但如果不是这样做,请告诉我!
我是否误解了这项工作的方式,或者我应该如何使用Cookie expiries强制注销?
这是我的基本设置:
app.UseCookieAuthentication(New CookieAuthenticationOptions() With
{
.AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
.AuthenticationMode = AuthenticationMode.Active,
.ExpireTimeSpan = TimeSpan.FromMinutes(1.0),
.SlidingExpiration = False,
.Provider = New CookieAuthenticationProvider() With
{
.OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(Of ApplicationUserManager, ApplicationUser, Integer)(
validateInterval:=TimeSpan.FromMinutes(1.0),
regenerateIdentityCallback:=Async Function(manager, user)
Return Await user.GenerateUserIdentityAsync(manager, DefaultAuthenticationTypes.ApplicationCookie)
End Function,
getUserIdCallback:=Function(id) id.GetUserId(Of Integer)())
},
.LoginPath = New PathString("/Account/Login")
})
答案 0 :(得分:1)
可能有点晚......
要使用Cookie Expiry,请将其委派给浏览器。如果Cookie过期,则浏览器无法发送。
每次请求都会调用OnValidateIdentity。如果要调试它,请将其拉出到新方法中,然后从该方法调试。
但是,只有在传递validationInterval时才会对数据库进行身份验证。