python - Django:根据域设置不同的 SESSION_COOKIE_DOMAIN
问题描述
我对不同的域使用相同的 Django 项目。有些是子域,有些是完全不同的域,所以我让这些域运行同一个 Django 站点:
- a.example1.com
- b.example1.com
- c.example1.com
- example1.com
- example2.com
由于与此查询无关的原因,我不使用站点框架,并且我settings.py
对所有站点都有一个,我想维护它。
当有人登录子域时,我希望他们也登录到任何其他子域。事实上,如果可能的话,我希望他们也能登录到其他站点,但我怀疑这是可能的。为了实现同时登录所有子域,我在settings.py中设置了如下变量:
SESSION_COOKIE_DOMAIN=".example1.com"
这就像宣传的那样工作,登录现在可以在不同的站点上使用。但是,我无法再登录任何其他域(我假设 cookie 是为错误的域设置的,因此无法正确识别)。我认为我应该做的是以某种方式设置SESSION_COOKIE_DOMAIN
为.example1.com
在主站点上或.example2.com
在其他站点上时。但是如何实现呢?
这是一个类似的问题,这个答案似乎通过轻量级解决方案完成了我正在寻找的事情。但是,这是为较旧的 Django 版本编写的。我尝试为 Django 3 重写它,如下所示:
class CrossDomainSessionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
if request.COOKIES:
host = request.get_host()
# check if it's a different domain
if host not in settings.SESSION_COOKIE_DOMAIN:
domain = ".{domain}".format(domain=host)
for cookie in request.COOKIES:
if "domain" in request.COOKIES[cookie]:
request.cookies[cookie]['domain'] = domain
except:
pass
return self.get_response(request)
但这似乎不起作用。这个条件:
if "domain" in request.COOKIES[cookie]:
简直是没见过面。不知道我应该改变什么。
解决方案
推荐阅读
- process - Visual Studio 应用程序未正确终止
- java - 无法解析符号“Place.Field”
- javascript - HereMap - Javascript - 切换到夜间模式
- javascript - 为什么 IntersectionObserver 返回的数组中 forEach 的索引始终为 0?
- python - 在顶部使用注释行编辑连接的 csv - Python
- php - Vue @click 事件不适用于显示模式
- c# - 如何通过多个字段加入 LINQ(2 TABLES 1 PK 到 2 FK) c# linq
- python-3.x - python中的子进程:文件不存在
- wordpress - 使用自定义图像创建 GCE 实例后的 Wordpress 部署
- android - 不工作时如何修复 this.backgroundMode.unlock()