2
我想在用戶重置密碼時刪除所有用戶會話,但我找不到這樣做的方法。 我的想法是讓特定用戶的所有UserTokens並將其刪除,但似乎因爲GAE webapp2刪除特定用戶的所有UserTokens(丟棄所有sessios)
user = model.StringProperty(required=True, indexed=False)
在UserToken模型
任何想法如何做到這一點
不可能?
我想在用戶重置密碼時刪除所有用戶會話,但我找不到這樣做的方法。 我的想法是讓特定用戶的所有UserTokens並將其刪除,但似乎因爲GAE webapp2刪除特定用戶的所有UserTokens(丟棄所有sessios)
user = model.StringProperty(required=True, indexed=False)
在UserToken模型
任何想法如何做到這一點
不可能?
我看到兩種方式如何做到這一點。
首先是繼承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)
這使用了按鍵名查詢按字典順序工作的事實。