【发布时间】: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