You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Tenants跨子域重定向会话丢失问题求助

Django Tenants跨子域会话丢失问题排查

问题描述

我正在使用Django Tenants开发SaaS项目,遇到跨子域重定向时用户会话无法保持的问题。

配置详情

  • 自定义用户模型为CustomUser(位于SHARED_APPS的account应用中)
  • Tenant模型与CustomUser为一对一关联

认证流程

用户在主域名localhost:8000登录,后端通过login(request, user)完成认证,随后跳转到子域http://tenant1.localhost:8000。

核心问题

跳转到子域后用户变为AnonymousUser,主域与子域间会话未被传递或识别。

已配置的settings.py片段

# 本地开发禁用安全设置(HTTP)
SESSION_COOKIE_SECURE = False 
CSRF_COOKIE_SECURE = False 
SESSION_COOKIE_SAMESITE = 'Lax'

请问是否遗漏了django-tenants或会话中间件的特定配置,以确保会话Cookie在所有模式/域名下有效?


解决方案

你的问题根源是会话Cookie的域名范围未覆盖子域,Django默认仅将Cookie绑定到当前请求的域名,子域无法读取主域的Cookie。需要补充以下关键配置:

1. 配置Cookie的跨子域生效域名

在settings.py中添加或修改:

# 让Cookie对所有localhost子域生效(带端口的本地开发场景)
SESSION_COOKIE_DOMAIN = '.localhost:8000'
CSRF_COOKIE_DOMAIN = '.localhost:8000'

生产环境提示:若使用不带端口的顶级域名(如example.com),只需设置为.example.com即可覆盖所有子域。

2. 确认中间件加载顺序

确保会话和认证中间件在Django Tenants中间件之前加载,正确顺序如下:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # Django Tenants中间件必须放在后面
    'django_tenants.middleware.main.TenantMainMiddleware',
]

3. 确保会话应用在共享应用列表

如果使用默认数据库会话存储,django.contrib.sessions必须加入SHARED_APPS,这样会话数据才能在所有租户间共享:

SHARED_APPS = [
    'django_tenants',
    'your_tenant_app',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',  # 必须在此列表中
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'account',  # 存放CustomUser的应用
]

4. 清除旧Cookie测试

修改配置后,务必清除浏览器中已有的旧Cookie(旧Cookie的域名是主域,无法被子域识别),再重新登录验证会话是否正常传递。


内容的提问来源于stack exchange,提问作者Boaz Kalonji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:07:39