使用相同的用户名asp identity注销所有用户

时间:2015-04-03 16:03:54

标签: c# asp.net asp.net-identity asp.net-identity-2

我最近在我的网站上实施了asp身份识别系统。

现在因为我不希望我的用户在他们之间使用帐户,我想要注销具有相同用户名的人。 我注意到我有一个AspNetUserLogins,理论上我可以从那里删除双重项目,但它总是空的。

我是否严重执行?它应该是空的吗?一切似乎都没有问题。

如果它应该是空的,我必须手动填写吗?

AspNetUserClaims是否也应该是空的,直到我为它做出自定义声明?

关于如何实施此自动退出系统的任何其他想法?

编辑:做了一些简单的研究,并实现了aspnetuserslogins只用于外部登录。但实际上是什么记录了谁登录的日志?

1 个答案:

答案 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 执行此类政策是一种非常糟糕的做法。尽量避免使用它。即使是不同的浏览器,或者一个具有单独会话的浏览器,也会被视为重复登录。