我有两个django应用程序,它们位于端口80
和9002
上的同一台服务器上。即网址为www.abc.com
和www.abc.com:9002
两者共享相同的数据库postgresql进行身份验证。我想在它们之间共享会话数据的共享,以便登录到一个应用程序的用户可以在另一个应用程序中自动登录。
我读了这些答案:Multiple Django apps, shared authentication和How to get distinct Django apps on same subdomain to share session cookie?
在我的两个django应用程序中做到了这一点:
添加以下行:
SESSION_ENGINE ='django.contrib.sessions.backends.signed_cookies'
SESSION_COOKIE_NAME ='abc'
SESSION_COOKIE_DOMAIN ='。abc.com'
但我仍然无法达到目的。 如何在两个django应用程序之间共享会话cookie,以便我可以进行共享身份验证?
答案 0 :(得分:0)
除了必须将这些设置应用到两个应用程序之外, 您的方法唯一缺少的是SESSION_COOKIE_DOMAIN。
您将其设置为“ .abc.com”,这意味着如果您的应用具有域名www.abc.com
和somesubdomain.abc.com
,它将可以正常工作。
但是您的第二个应用程序在此情况下为www.abc.com:9002
,因为包含了端口,它与www.abc.com
没有共享相同的TLD。因此,django认为www.abc.com:9002
和www.abc.com
是非常不同的域,而不是来自同一根.abc.com
。
如果我正在研究此方法,则有几种可能的方法:
将两个应用程序合并为一个根django应用程序。无论如何,Django应用都是模块化的,因此您可以创建一个单独的ROOT_URL_CONF
和DJANGO_SETTINGS_MODULE
来指定这两个应用在相同域中的工作方式。例如,您可以为每个应用程序附加一个不同的前缀URL。
您使用负载平衡器或反向代理(例如nginx或haproxy)为每个应用程序分配不同的子域,然后将每个应用程序部署在不同的端口中。假设最终结果是您在first.abc.com
上部署了第一个django应用程序,而在second.abc.com
中部署了第二个应用程序(全部在前端使用端口80),那么它将共享相同的会话。只需记住,您需要在后端中分配应用程序使用的实际端口。
我的其他说明。在生产设置中,您还希望添加ALLOWED_HOSTS
设置并将.abc.com
包括在列表中。