【问题标题】:Webapp2 List (and/or kill) All Sessions for User (Appengine Python)Webapp2 列出(和/或终止)用户的所有会话(Appengine Python)
【发布时间】:2013-08-28 15:40:55
【问题描述】:

我正在使用 webapp2 开发 appengine 应用程序。我的认证基于this article 中提出的想法。

我添加了删除帐户的功能(这是应用程序的要求),但我遇到了会话问题。如果用户从多个位置登录,则该用户将有两个身份验证令牌。当从其中一个登录中删除帐户时,该登录的会话将被销毁。但是,另一个登录名将在数据存储区中有一个身份验证令牌。

我更改了 user_required/check_login 装饰器/函数,使其首先在会话中查找用户。如果找不到,我让客户端知道他们需要登录。如果确实找到了,我就从数据存储中获取用户。如果它是无,那么我假设有多个登录,另一个删除了帐户(这也删除了用户)。因此,我终止了会话,并告诉客户端用户不再存在。否则,我会检查用户是否经过验证,如果没有,我会告诉客户端必须先验证用户才能执行任何操作。

如果帐户被删除,我宁愿能够终止用户的所有会话。有没有办法做到这一点?我也想要这个功能,这样我就可以拥有一个功能,登录用户可以看到该用户的所有会话,并随意终止/撤销它们(有点像 Facebook 和谷歌,我相信很多其他服务)提供。

编辑:尽管我可能最终会在某个时候从数据存储中获取用户,并且当我调用 self.user 它是 webapp2.cached_property 时,我仍然宁愿不必须在每个请求开始时让用户使用user_required 装饰,如果我可以只从会话中提取信息就可以逃脱。

【问题讨论】:

  • 如果您在针对数据存储的每个请求中检查用户的会话,那么我认为您已经尽了最大努力。除非您实际上是在询问是否可以删除用户计算机上的 cookie,在这种情况下,这是不可能的。
  • @dlebech 当我说摆脱会话时,我的意思是把它从数据存储中取出,这样下次用户尝试继续登录时,user_required 方法会说没有此会话的用户。无论是因为用户删除了帐户,还是因为用户撤销了该会话(如果我能够列出该用户的所有当前会话并允许用户“撤销/删除”会话(意味着在数据存储中摆脱它))
  • 感谢您的澄清。那样的话,我觉得the answer from dragonx比较合适。

标签: python google-app-engine session python-2.7 webapp2


【解决方案1】:

听起来您正在使用数据存储后端进行会话。

最好的方法可能是修改会话框架,以便会话实体存储您的用户 ID。这样您就可以通过用户 ID 查询会话实体,然后删除它们并将它们从内存缓存中清除。

或者,您可以将会话存储在您的用户实体中,当您删除用户时,通过该列表并删除所有会话。不过,从 User 实体中清除过期会话可能有点麻烦。

【讨论】:

  • 如何修改会话框架?会不会类似于子类化DatastoreSessionFactory?您还提到清理过期会话。我应该有一个运行每个 x 并删除已过期令牌的 cron 作业,还是由框架处理?
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多