我最近在我的网站上实施了asp身份识别系统。
现在因为我不希望我的用户在他们之间使用帐户,我想要注销具有相同用户名的人。 我注意到我有一个AspNetUserLogins,理论上我可以从那里删除双重项目,但它总是空的。
我是否严重执行?它应该是空的吗?一切似乎都没有问题。
如果它应该是空的,我必须手动填写吗?
AspNetUserClaims是否也应该是空的,直到我为它做出自定义声明?
关于如何实施此自动退出系统的任何其他想法?
编辑:做了一些简单的研究,并实现了aspnetuserslogins只用于外部登录。但实际上是什么记录了谁登录的日志?
答案 0 :(得分:1)
您需要在某个位置存储已登录用户的列表,例如数据库或文件。如果具有名称的用户已登录,则新用户尝试登录搜索先前的记录。
如果找到重复项,则只需更新SecurityStamp
。
UserManager.UpdateSecurityStampAsync(userId);
因此,下次当前用户验证间隔结束并发现SecurityStamp
无效时,他将自动注销。您可以在idedntity配置类中找到验证间隔。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = System.TimeSpan.FromDays(30),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
调用上述方法后,只需登录新用户并更新登录记录列表。
NTOE 执行此类政策是一种非常糟糕的做法。尽量避免使用它。即使是不同的浏览器,或者一个具有单独会话的浏览器,也会被视为重复登录。