使用相同用户名 asp 身份注销所有用户

Signout all users with the same username asp identity

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

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

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

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

AspNetUserClaims 是否也应该为空,直到我对其进行自定义声明?

关于如何实施此自动注销系统还有其他想法吗?

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

您需要将登录用户列表存储在某个地方,例如数据库或文件中。并且当新用户尝试登录时,如果名称为 name 的用户已经登录或未登录,则搜索以前的记录。

如果发现重复项,则只需更新 SecurityStamp

UserManager.UpdateSecurityStampAsync(userId);

所以下次当前用户验证间隔结束并且发现SecurityStamp无效时,他将被自动注销。您可以在您的身份配置中找到验证间隔 class。

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