Webapp2列出(和/或杀死)用户的所有会话(Appengine Python)

时间:2013-08-26 07:53:18

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

我正在使用webapp2开发一个appengine app。我的身份验证基于this article中提出的想法。

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

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

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

编辑尽管我最终可能会在某个时候从数据存储中获取用户,但当我致电self.user时,它是webapp2.cached_property,我仍然不愿意拥有来让用户在每个用user_required修饰的请求的开头,如果我可以只从会话中提取信息而离开。

1 个答案:

答案 0 :(得分:2)

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

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

或者,您可以将会话存储在用户实体中,当您删除用户时,请浏览该列表并删除所有会话。从用户实体清除过期会话可能会有点痛苦。