GAE webapp2 删除特定用户的所有用户令牌(删除所有 sessios)


我想

在用户重置密码时删除所有用户会话,但我找不到一种方法。我的想法是获取特定用户的所有用户令牌并删除它们,但这似乎是不可能的,因为

user = model.StringProperty(required=True, indexed=False)

在用户令牌模型中

有什么想法吗?

我看到两种方法可以做到这一点。

首先是从UserToken类继承,使user索引属性。然后,可以将 token_model 类属性设置为用户类中的新令牌模型。这是代码:

class MyToken(UserToken):
    user = ndb.StringProperty(required=True)
class MyUser(User):
    token_model = MyToken
    # etc.

如果您还没有这样做,请不要忘记将 webapp2 使用的用户模型设置为您的用户类:

webapp2_config = {
    "webapp2_extras.auth": {
        "user_model": "models.MyUser"
    },
    # etc.
}
app = webapp2.WSGIApplication(routes, config=webapp2_config)

第二种方法是根据令牌密钥名称进行复杂的数据存储查询。由于键名的形式是<user_id>.<scope>.<random>,因此可以检索以特定用户ID开头的所有实体。看看代码:

def query_tokens_by_user(user_id):
    min_key = ndb.Key(UserToken, "%s." % user_id)
    max_key = ndb.Key(UserToken, "%s/" % user_id)  # / is the next ASCII character after .
    return UserToken.query(UserToken.key > min_key, UserToken.key < max_key)

这利用了按键名查询按字典顺序工作的事实。

最新更新