【问题标题】:GAE webapp2 delete all UserTokens (drop all sessios) for specific userGAE webapp2 删除特定用户的所有 UserToken(删除所有 sessios)
【发布时间】:2015-06-19 07:24:52
【问题描述】:

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

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

在 UserToken 模型中

有什么想法吗?

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案1】:

    我看到了两种方法。

    首先是从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)
    

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

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2023-03-22
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多