2011-01-27 62 views
2

事情是。我有一个Django应用程序服务于不同的网站。django:是否有可能将用户从另一个域注册到子域中?

site1.myapp.com
site2.myapp.com

在使用者经由第三方SSO系统,其然后被重定向(inkl。一个valdiation POST)到https://myapp.com/auth/

然而登录。因为我的用户都属于只有1个“站点”,我希望myapp.com/auth/ 将用户登录到相关站点,例如。 site1.myapp.com或site2.myapp.com,然后将它们重定向到该网站...

这是否可能?或者我应该以完全不同的方式去解决这个问题? :)

我应该提到,当涉及到应用程序的一般用法时,我有子域中间件以确保用户始终只访问其帐户有效的子域(和数据)。

我想使用子域名的原因是为了让用户简单记住他们的帐户网址,同时保持只维护一个django应用程序的优点。

谢谢。希望你能帮到:)

亲切的问候。

皮特

回答

0

在Django中你有sites概念。您可以创建自己的log in view。如果这还不够,你可以创建自己的authentification backend

+0

那么,这并没有真正削减它。我需要能够将用户登录到他的“自己的应用程序”,但这必须在主域上完成。我没有看到网站在哪里帮助我?我在会议,重定向,cookies,域名等方面的想法更多,但就我所知,这就是:-S – 2011-01-27 11:53:19

2

我知道这个问题是旧的,但由于谷歌把我带到这里,我将添加这些链接

这个答案在跨子倒是(A)认证和(b)检测其子域在使用中潜在地重定向用户

A.1。如果你想允许所有(通配符)子网域 * .myapp.com,这是通过添加一行来实现到的settings.py:

SESSION_COOKIE_DOMAIN=".myapp.com"

(请注意,现在不能在本地主机工作)

详细here (SO, 2009)here (SO, 2010)in Django docs

A.2。如果你想允许刚刚那两个子域,即之间的交叉认证,他们将不会被记录到site3.myapp.com,然后它会a bit more complicated

B.要查看的子域名中使用 有票友包管理django中的子域名,但您可以根据请求粗暴地查看。META [ 'HTTP_HOST']:

try: 
    http_host = request.META['HTTP_HOST'] 
except KeyError: 
    print "Can't find HTTP_HOST" 

if http_host: 
    if '.myapp.' in http_host: 
     subdomain = http_host.split('.myapp.')[0] 
    else: 
     subdomain = '' 

然后检查,如果你使用这个subdomain高兴与request.user。 如果您喜欢,请使用类似HttpResponseRedirect的内容将它们发送到不同的子域。如果你已经完成了上面的A.1或A.2,在你的应用程序的眼中,它们在被重定向后在新的subdomain.myapp.com中是同一个用户(已经登录)(他们不必登录再次)。

示例:如果用户使用ireland.myapp.com创建一个帐户,并且希望始终在该网站上保留它们,那么当他们尝试访问usa.myapp.com时,他们仍然会登录,您可以识别它们并将它们发送回ireland.myapp.com(虚构的例子,而不是移民的隐喻!)

相关问题