我最近在我的网站上实现了asp身份系统。
现在,由于我不希望我的用户在他们之间使用帐户,我想注销使用相同用户名的人。我注意到我有一个AspNetUserLogins,理论上我可以从那里删除加倍的项目,但它总是空的。
我执行得不好吗?它应该是空的吗?除此之外,一切似乎都很顺利。
如果它应该是空的,我必须手动填充吗?
在我为AspNetUserClaims进行自定义声明之前,它是否也应该为空?
关于如何实现这个自动注销系统,还有其他想法吗?
编辑:做了一些简单的研究,发现aspnetusers登录只用于外部登录。但是,究竟是什么保存了登录者的日志?
您需要将登录用户的列表存储在数据库或文件中的某个位置。当一个新用户尝试登录时,如果一个有名字的用户已经登录或没有登录,则搜索以前的记录。
如果发现重复,则只更新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执行此类政策是一种非常糟糕的做法。尽量避免。即使是不同的浏览器,或者一个具有单独会话的浏览器,也会被视为重复登录。