我正在尝试使用Django和django-tenant-schemas实现多租户架构。
当我登录应用程序时,我成功从http://app.mysite.com:8000/
访问baseapp并设置了一个cookie sessionId(仅限http)。 (端口8000仅用于开发)
我现在正试图向http://tenant1.mysite.com:8000/accounting/
提出请求。但是,当我检查请求标头时,即使在我的设置文件中,我也看到cookie尚未设置:
SESSION_COOKIE_DOMAIN = ".mysite.com"
CSRF_COOKIE_DOMAIN = ".mysite.com"
我的印象是,将我的Cookie域设置为.mysite.com
将允许访问子域。我在这里缺少什么?
答案 0 :(得分:0)
我知道这有点老了,但万一有人在这里想知道类似的问题,可能会设置cookie,但SessionMiddleware找不到收到的会话ID的有效会话。例如,如果您正在使用数据库会话后端并且恰好将django.contrib.sessions
放在TENANT_APPS
列表中,则可能会发生这种情况。在这种情况下,Django无法找到任何会话,因为当您在app.mysite.com
登录时,会话存储在与app
租户对应的数据库架构中,并且当您尝试访问{{1}时} tenant1.mysite.com
查找存储在SessionMiddleware
架构中的会话。
所以得出的结论是,如果您使用数据库后端存储会话,那么您应该将tenant1
放入django.contrib.sessions
列表而不是SHARED_APPS
列表。
希望这有帮助。