15

我有两个网站,分别是 foo.com 和 bar.com,它们都是基于 Django 的。主要注册发生在 foo.com 上(我希望主要用户 db 在这里),我希望发生三件事:

1) 登录 foo.com 的用户无需再次登录即可自动访问 bar.com

2) 直接登录 bar.com 的用户是针对 foo.com 用户 db 进行身份验证的。

3) 用户无需直接在 bar.com 注册。

我怎样才能做到这一点?如果它大大简化了事情,我可以让 bar.com 成为 foo.com 的子域(例如 bar.foo.com),但它们必须是单独的站点。

4

4 回答 4

7

这取决于您的要求。如果可以,简单的解决方案是简单地将两个站点托管在一个 Django 实例上。换句话说,您的 Django 项目同时托管了这两个站点,但您有一个映射foo.comhttp://localhost/foo/映射bar.comhttp://localhost/bar/. 在这种情况下,Django 的身份验证系统将“正常工作”。重写规则当然也可以应用于子域;我已经使用这种技术构建了一个托管数百个子域的系统。

如果这不是一个选项,那么在您的 Django 实例和 setting 之间共享数据库SESSION_COOKIE_DOMAIN,正如其他人所提到的,应该可以工作。

于 2009-10-17T08:47:06.587 回答
6

您的第三个要求可以通过在两个站点之间共享相同的数据库轻松解决(因此具有相同的用户表。

由于跨域问题,第一个要求很棘手(不会共享会话 cookie)。

您真正需要的是Single Sign On (SSO)。您可能会考虑django-openid

于 2009-10-17T07:02:04.093 回答
5

我有一个非常相似的问题,但 OpenID 对我来说不是一个可行的解决方案。随着 django >1.2 中多个数据库的出现,现在可以很容易地跨站点共享会话和登录数据。这篇博文很好地解释了如何设置它。希望其他人发现这和我一样有用。

于 2011-07-12T01:32:38.830 回答
0

我认为您正在寻找的是SESSION_COOKIE_DOMAIN设置。你可以这样设置:

SESSION_COOKIE_DOMAIN = 'foo.com'

有关更多信息,请参阅http://docs.djangoproject.com/en/dev/topics/http/sessions/#session-cookie-domain。这确实假设两个应用程序都使用相同的会话存储后端。

于 2009-10-17T07:13:48.863 回答