我正在尝试将我们的代码迁移到Cloud NDB。我们为每个客户提供了单独的名称空间。
如何安全地为每个请求切换命名空间?
我已经在migration documentation上实现了类似于示例的Flask中间件
命名空间是客户端的属性。因此,当请求进入时,我从accesstoken中确定电子邮件,并确定该用户属于哪个名称空间。然后我更改了客户端的名称空间。
恐怕这个client.namespace属性不是线程安全的,而且我不想让用户看到彼此的数据。
client = ndb.Client()
def ndb_wsgi_middleware(wsgi_app):
def middleware(environ, start_response):
with client.context():
return wsgi_app(environ, start_response)
return middleware
def switch_user(email):
client = context_module.get_context().client
client.namespace = determine_namespace(email)我可以将客户端的创建转移到中间件中,但我已经了解到这会产生许多我们想要避免的开销。命名空间不应该是上下文的属性而不是客户端的属性吗?
发布于 2020-05-15 20:00:30
此问题已在python-ndb库https://github.com/googleapis/python-ndb/pull/388中修复
nampespace属性已经移动到上下文级别,所以我现在可以根据请求更改它。该问题已在版本1.2.0中修复
https://stackoverflow.com/questions/61119154
复制相似问题