google-app-engine - 获取所有活动用户会话 webapp2
问题描述
我正在扩展 Webapp2 会话文档中指定的调度方法: https ://webapp2.readthedocs.io/en/latest/_modules/webapp2_extras/sessions.html#SessionStore
def dispatch(self):
# Get a session store for this request.
self.session_store = sessions.get_store(request=self.request)
try:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self)
finally:
# Save all sessions.
self.session_store.save_sessions(self.response)
@webapp2.cached_property
def session(self):
# Returns a session using the default cookie key.
return self.session_store.get_session()
我想出于某种目的获取特定用户的所有活动会话。我怎么做?
解决方案
试试UserToken
模型。
from webapp2_extras.appengine.auth.models import UserToken
def all_sessions_for_user(user, _limit=100):
return UserToken.query(UserToken.user == str(user.key.id()).fetch(limit=_limit)
编辑 - 选项 2
然后,我相信唯一的方法是定义自己的 session_store 后端,很可能使用数据存储。webapp2 提供了一个数据存储后端(后端选项是securecookie
、datastore
和memcache
),但它没有用户字段。
因此,您需要对两者进行子类化Session
并DatastoreSessionFactory
添加它:
from webapp2_extras import auth
from webapp2_extras.appengine.sessions_ndb import Session, DatastoreSessionFactory
class MySession(Session):
user_id = ndb.KeyProperty(User)
class MyDatastoreSessionFactory(DatastoreSessionFactory):
session_model = MySession
def save_session(self, response):
"""extract user_id from self.session.data and pass it to self.session_model constructor"""
if self.session is None or not self.session.modified:
return
deserialized_session = auth.get_auth().store.deserialize_session(self.session.data)
self.session_model(id=self.sid, data=dict(self.session), user_id=deserialized_session['user_id'])._put()
self.session_store.save_secure_cookie(response, self.name, {'_sid': self.sid}, **self.session_args)
然后当你调用时get_session()
,你只需要指定你的新后端工厂:
self.session_store.get_session(factory=MyDatastoreSessionFactory')
推荐阅读
- gitlab-ci - Gitlab-ci:将一个仓库从 Gitlab 推送到 Gitlab Runner 主机?
- python - 如何使用 shell 命令按应用程序名称查找 PID
- python - 剪刀石头布游戏玩家2输入错误
- windows - 使用批处理脚本在文本文件中使用文件夹列表将只需要的文件夹复制到目标文件夹
- r - 用第二个数据帧中的相同行名替换第一个数据帧中的行
- salesforce - 如何在 Salesforce 中自定义 RemoteAccessAuthorizationPage?
- python - Python 检查网站状态是否正常,并返回响应时间
- javascript - 离子 SQLite ; 无法打开数据库
- logging - 如何使用 Terraform 11.14 启用 Azure Key Vault 日志记录?
- ios - 如何从 Firestore 返回数组中的数据?