单账号登录初探

服务器

浏览数:125

2020-6-21

                                                            单账号登录

前言:本来想使用单点登录这个词,后来发现,单点登录普通是指在不同系统中,只登录一次;

eg:楼主新人;

一、思路:使用一个可以共用的存储来储存登录信息,保证一对一的关系(这里使用redis,没有使用数据库);

二、实现:

    1、某账户第一次登录时候,生成token,设置过期时间(一般可以设置1个月),然后在redis中,设置2个key-value(1、token为key,userId为value;2、userId为key,token为value;如果需要前缀后缀的话,也加上);同时,客户端储存token;

    2、使用相关功能(需要登录的)时候,带上token(可以放header中,也可以加密进去);根据token可以获得userId;

    3、另一个账号登录,生成token,照着步骤1,但是要把已经存在的key-value(就是1生成的)给替换掉;

    4、这个时候,1步骤产生的token,userId已经不存在;再使用相关功能时候,由于userId不存在,所以需要再次登录,即不能继续操作,需要从3再操作;周而复始的,只能一个人(设备)使用账号;

三、缺点

    1、非实时性,不是第二个登录,第一个立刻被挤下去(可以通过推送完成?);

    2、需要维护2个key-value;

    3、使用redis,由于在内存中,可能会发生意外情况(突然断电啥的);

    4、这里也可以考虑储存设备号,保证一个设备登录(尚未尝试)。

    5、他人可以通过获取token来登录(只能防一下不懂的人。。)。

四、总结

    这是我第一次写博客,写的不好,也只是突然想到了什么,感觉不记录下来很容易忘记。如果能帮到一些人,那是极好的。

    其他漏洞和更好的方案请留言;非常感谢大家评论,也很开心和大家一起讨论。

作者:MethodMe