当已经有第一人登录时,我们如何防止第二人登录

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)。

当其他人想要登录时,您只需检查这些商店是否有令牌。如果不存在,则该用户可以继续登录。否则,您只需使用“先注销”消息拒绝承诺。

【讨论】:

但它与单个设备无关。我想在多个设备上执行。

以上是关于当已经有第一人登录时,我们如何防止第二人登录的主要内容,如果未能解决你的问题,请参考以下文章

当用户使用其他帐户登录时,如何防止激活应用内订阅?

在 Play 框架中防止多次登录网站

如何防止水晶报表中的数据库登录窗口?

java如何写一个防止同账号不同ip登录的程序?请给出思路甚至代码

防止没有[激活具有“真”值]的用户登录

如何防止同一用户同时登录 Firebase?