GAE webapp2 删除特定用户的所有 UserTokens(删除所有会话)
GAE webapp2 delete all UserTokens (drop all sessios) for specific user
我想在用户重置密码时删除所有用户会话,但我找不到这样做的方法。
我的想法是获取特定用户的所有 UserTokens 并删除它们,但似乎不可能,因为
user = model.StringProperty(required=True, indexed=False)
在 UserToken 模型中
知道怎么做吗?
我看到了两种方法。
首先是继承自 UserToken
class 使 user
成为索引 属性。然后您可以将 token_model
class 属性 设置为您的用户 class 中的新令牌模型。这是代码:
class MyToken(UserToken):
user = ndb.StringProperty(required=True)
class MyUser(User):
token_model = MyToken
# etc.
不要忘记将 webapp2 使用的用户模型设置为您的用户 class 如果您还没有这样做的话:
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)
这利用了键名查询按字典顺序工作的事实。
我想在用户重置密码时删除所有用户会话,但我找不到这样做的方法。 我的想法是获取特定用户的所有 UserTokens 并删除它们,但似乎不可能,因为
user = model.StringProperty(required=True, indexed=False)
在 UserToken 模型中
知道怎么做吗?
我看到了两种方法。
首先是继承自 UserToken
class 使 user
成为索引 属性。然后您可以将 token_model
class 属性 设置为您的用户 class 中的新令牌模型。这是代码:
class MyToken(UserToken):
user = ndb.StringProperty(required=True)
class MyUser(User):
token_model = MyToken
# etc.
不要忘记将 webapp2 使用的用户模型设置为您的用户 class 如果您还没有这样做的话:
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)
这利用了键名查询按字典顺序工作的事实。