0

我正在使用 webapp2 开发一个 appengine 应用程序。我的认证基于本文提出的想法。

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

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

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

编辑:即使我可能最终会在某个时候从数据存储中获取用户,并且当我称之为self.usera时,如果可以的话webapp2.cached_property,我仍然宁愿不必每个请求的开头获取用户user_required也许只从会话中提取信息就可以逃脱。

4

1 回答 1

3

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

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

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

于 2013-08-26T15:28:18.023 回答