当已经有第一人登录时,我们如何防止第二人登录
Posted
技术标签:
【中文标题】当已经有第一人登录时,我们如何防止第二人登录【英文标题】:How we prevent second person login when already first person is logged in same 【发布时间】:2016-11-01 02:30:16 【问题描述】:我要求只有一个用户处于活动状态(即登录),而其他用户不能使用相同的凭据登录。当他尝试登录时,我需要使用 Ionic+AngularJs(Hybrid)移动设备限制其他用户应用程序。
目前使用服务器端作为 Java 和客户端作为混合框架。 当用户登录时,它会生成一个基本身份验证令牌,然后为每个 REST API 服务调用发送生成的令牌作为
login: function(userName, password, authTokenValue)
var loginPath = '/login/' + userName + '/' + password;
//calling loginCustomer rest service
return $resource(host + loginPath, ,
query:
headers:
'X-Auth-Token': authTokenValue
,
method: 'GET'
);
并且 Token 是根据用户名和密码生成的,它不相同(即随机生成的令牌值) 但我没有为任何用户维护任何会话,但我有一个要求,当用户已经登录时,另一个人不能使用相同的凭据访问这些服务。
请提供一些指导方针,我该如何实现? 对不起我的英语不好
【问题讨论】:
实际上我不知道是否有任何方法可以使用 inbuild 函数来做到这一点。如果我必须这样做,我会这样做。保存他上次登录的IP,登录时间和注销时间,并在下次用户登录时进行比较。 可能您正在寻找并发会话控制:docs.spring.io/spring-security/site/docs/3.1.x/reference/… @SlavaSemushin 我在服务器端使用了相同的概念。 但第一个用户登录(活动)和下一个用户使用相同的凭据登录,然后第二个用户变为活动状态,第一个用户变为非活动模式 是的,默认情况下它是如何工作的。现在您需要找到一种方法来覆盖/自定义此逻辑并对其进行修改以执行相反的操作。 与问题无关,但不建议通过url传递用户名和密码。 【参考方案1】:您可能正在寻找的是会话管理。
由于您使用令牌,因此在进行身份验证后保存令牌可能是一个好主意(持久存储,例如 $sessionStorage
或 $localStorage
- 检查 ngStorage)。
当其他人想要登录时,您只需检查这些商店是否有令牌。如果不存在,则该用户可以继续登录。否则,您只需使用“先注销”消息拒绝承诺。
【讨论】:
但它与单个设备无关。我想在多个设备上执行。以上是关于当已经有第一人登录时,我们如何防止第二人登录的主要内容,如果未能解决你的问题,请参考以下文章