【发布时间】:2012-11-03 08:11:41
【问题描述】:
我正在尝试在 Django 和 PostgreSQL 中实现一个多租户应用程序,每个租户都有一个单独的(但相同的)架构。
我选择租户架构:
cursor.execute('SET search_path TO ' + schemas)
我有一个中间件,可以根据主机名选择要使用的架构,所以它的工作方式如下:
foo.mysite.com --> use schema 'client_moo'
bar.mysite.com --> use schema 'client_bar'
这在原则上是有效的,即在简单的情况下(简单的数据库查找)
但是,当我尝试登录时,事情开始出现问题。每个租户都应该有自己的独立登录页面,因此 foo.mysite.com 将不同于 bar.mysite.com,而 mysite.com 将不同于 mysite.com。
但是,尝试从子域登录管理应用程序会导致重定向回登录页面。
会发生什么:
-
mysite.com登录正常(架构:public) -
foo.mysite.comn不会登录,而是将 (HTTP 302) 重定向回自身 (foo.mysite.com)(架构:client_foo)
强制架构始终为client_foo 将导致mysite.com 工作(即登录client_foo 架构),但foo.mysite.com 仍然无法工作。
完全删除架构选择(使其始终位于public 架构上)将使两个 URL 都能正常登录。
【问题讨论】:
-
“尝试从子域登录到管理应用程序会导致重定向回登录页面”:这听起来不像是 PostgreSQL 问题。 PostgreSQL 不做“重定向”
标签: django postgresql database-schema multi-tenant