0%

管理系统之用户登录

需求

  • 同一个账号只能一处登录

解决方法

  • 修改flask session(保存在内存中)存储到redis
  • 参考flask_session 修改save_session,只在用户登录时存储当前session到redis(避免其他访问存储session)
  • 在用户登录的接口中,清除当前用户存储在redis中的其他session
  • 用户每次访问判断当前用户session和redis中是否一致,实现同一个账号只能一处登录

插件

  • flask_login
  • flask_session(参考)

flask_login 记住帐号访问

  • 携带session(remember_token包含用户id)发送请求
  • 通过用户id加载用户 @login_manager.user_loader 数据库获取用户信息

同一个账号一处登录

  • 管理系统后台使用flask
  • 存储用户session使用redis
  • 参考flask_session
  • 登录时判断当前用户的session和redis这个用户的session的值是否相同,相同则删除redis的其他session(保证一个帐号,同一时间只能一个在线)
  • 保存此次登录用户的session
  • save_session只保存登录session,登出logout_user会清除当前用户的session

记住帐号

  • 默认使用
  • 在@login_manager.user_loader中查询当前用户的session是否在redis session中
  • 如果session失效(浏览器关闭、登出),记住功能失效,需要重新登录

思考

  • 总体来说根据自己的需求和想法,修改了flask_session和用户登录接口
  • flask_session会不会有更好的解决方法
  • session和token都存在安全问题,简单的可以采用请求签名认证,最好的使用https