(Django)在不同域上的两个站点之间共享身份验证

Ter*_*y J 14 django django-authentication

我有两个网站说foo.com和bar.com都是基于Django的.主要注册发生在foo.com上(我希望主要用户数据库在这里),我希望有三件事情发生:

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

2)直接登录bar.com的用户将通过foo.com用户db进行身份验证.

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

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

Joh*_*ett 6

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

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

你真正想要的是单点登录(SSO).你可能会考虑django-openid.

  • #2可以通过以下两种方式完成:直接访问其他数据库,或使用服务器<=>服务器聊天.正如约翰所说,#1是主要问题. (2认同)

Dan*_*aab 6

这取决于您的要求.如果你能够,简单的解决方案就是在一个Django实例上简单地托管两个站点.换句话说,你的Django项目举办这两个网站,但你有一个URL 重写规则映射foo.comhttp://localhost/foo/bar.comhttp://localhost/bar/.在这种情况下,Django的auth系统将"正常工作".重写规则当然也适用于子域; 我已经构建了一个使用这种技术托管数百个子域的系统.

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


din*_*ino 5

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