我有两个网站,分别是foo.com和bar.com,并且都基于Django。主要注册在foo.com上(我希望主用户数据库在这里),我希望发生以下三件事:
1)在foo.com登录的用户可以自动访问bar.com而无需重新登录
2)直接在bar.com登录的用户被验证为foo.com用户数据库中的用户。
3)无需在bar.com直接注册用户。
如何实现这一点?如果大大简化了操作,我可以将bar.com设置为foo.com的子域名(例如bar.foo.com),但它们必须是不同的网站。
我有两个网站,分别是foo.com和bar.com,并且都基于Django。主要注册在foo.com上(我希望主用户数据库在这里),我希望发生以下三件事:
1)在foo.com登录的用户可以自动访问bar.com而无需重新登录
2)直接在bar.com登录的用户被验证为foo.com用户数据库中的用户。
3)无需在bar.com直接注册用户。
如何实现这一点?如果大大简化了操作,我可以将bar.com设置为foo.com的子域名(例如bar.foo.com),但它们必须是不同的网站。
foo.com
映射到http://localhost/foo/
和bar.com
映射到http://localhost/bar/
。在这种情况下,Django的auth系统将“只需工作”。重写规则当然也适用于子域;我使用此技术构建了一个托管数百个子域的系统。SESSION_COOKIE_DOMAIN
应该可以正常工作,如其他人所提到的。我有一个非常类似的问题,但OpenID对我来说不是可行的解决方案。随着Django 1.2以上版本中引入了多个数据库,现在很容易在不同的站点之间共享会话和登录数据。这篇博客文章很好地解释了如何设置它。希望其他人也能像我一样发现它有用。
我认为你要找的是SESSION_COOKIE_DOMAIN
设置。你可以这样设置:
SESSION_COOKIE_DOMAIN = 'foo.com'
请参阅http://docs.djangoproject.com/en/dev/topics/http/sessions/#session-cookie-domain以获取更多信息。这假定两个应用程序都使用相同的会话存储后端。
这些可以通过实现CAS(集中身份验证服务)来实现。
在您的示例中,foo.com是您的服务器,bar.com是客户端。只需要一个服务器;您可以拥有尽可能多的客户端。
在您的服务器上:
在您的客户端上:
希望这可以帮助到其他人,因为我没有找到任何明确给出并解释上述指令的教程。