我在我的MVC5应用程序中实现了ASP.net Identity 2.1.0身份验证。我正在寻找一种方法,每个用户名/密码组合一次只允许一个连接。例如,如果某人使用了用户名A
和密码B
,那么在他们断开连接之前,任何尝试使用密码A
作为B
进行连接的人都将被拒绝并显示一条消息"有一个活跃的用户使用该信息登录!"。
我已尝试使用CookieAuthenticationProvider.OnValidateIdentity
和CookieAuthenticationProvider.OnResponseSignIn
,但我不知道如何检测活跃用户的会话。
我发现a post有类似的东西,但不是拒绝使用相同凭据的第一个连接,而是在密码更改时使连接无效。
答案 0 :(得分:0)
我会通过每次用户登录并在用户会话和身份验证令牌中存储新GUID时生成新的GUID来解决问题。在每个请求或某个时间间隔内,您可以比较两者,如果它们不匹配,您可以将用户注销。
使用这种方法,当用户从第二个浏览器/设备登录时,您可以通过一条消息提示他们当前已在其他地方登录,并且如果会话继续,该会话将被注销。