如何处理用户多端登录
项目中遇到的问题
用户在chrome和edge都登录,在一端修改了密码,另一端还能正常登录。
这个事件引出了很多问题。
需求1-允许用户多端登录
允许用户多端登录,在允许用户多端登录的情况下,修改密码后,其他端没修改密码是否被退出登录,需要重新登录
解决方案
在redis里存一个列表,记录这个用户每次登录产生的sessionId(手机号或者用户ID当键),当用户修改密码的时候,从列表中取出这些sessionID,并从存sessionID的redis库中删除这些sessionID。
需求2-不允许用户多端登录
不允许多端登录,当用户在第二个端登录时,让第一段登录的情况失效。
解决方案
在redis里存一个string,记录这个用户每次登录产生的sessionId(手机号或者用户ID当键),当用户登录的时候(login api)判断,这个redis(string)里是否有值, 有值就删除,当用户在登录的时候在登录装饰器中用这个string记录用户sessionID。保证只存一个sessionID
补充说明:
以上相当于在flask,session机制外,自己维护一个每个用户对应的sessionID的数据,通过操作这些sessionID,达到控制用户多端登录的业务。
flask,session机制是值,给前端返回的cook