Django 身份验证在公共架构以外的架构上不起作用
我试图在Django和PostgreSQL中实现一个多租户应用程序,每个租户都有一个单独(但完全相同)的模式 我使用以下选项选择租户架构:Django 身份验证在公共架构以外的架构上不起作用,django,postgresql,database-schema,multi-tenant,Django,Postgresql,Database Schema,Multi Tenant,我试图在Django和PostgreSQL中实现一个多租户应用程序,每个租户都有一个单独(但完全相同)的模式 我使用以下选项选择租户架构: cursor.execute('SET search_path TO ' + schemas) 我有一个中间件,它根据主机名选择要使用的模式,因此它的工作原理如下: foo.mysite.com --> use schema 'client_moo' bar.mysite.com --> use schema 'client_bar' 这在原
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
)public
而不是登录将重定向(HTTP 302)回自身(foo.mysite.com
)(架构:foo.mysite.com
)client\u foo
强制模式始终为
client\u foo
将导致mysite.com
工作(即,登录client\u foo
schema),但foo.mysite.com
仍不工作
完全删除架构选择(使其始终处于
public
schema)将使两个URL都可以正常登录。1)您是否正确设置了会话cookie以支持跨域会话?见:
2) 如果您使用的是DB会话存储(默认设置),那么切换架构很可能会导致Django无法从数据库中获取会话(取决于中间件的顺序)。“尝试从子域登录到管理应用程序会导致重定向回登录页”:这听起来不像是PostgreSQL问题。这里的问题是PostgreSQL不执行“重定向”会话。