事情是。我有服务于不同的网站一个Django应用程序。
site1.没有app.com site2.没有app.com
在使用者经由第三方SSO系统,其然后被重定向登录(inkl。一个valdiation POST)到https://myapp.com/auth/
然而。因为我的用户都属于只有1个“点”我想myapp.com/auth/用户登录到相关网站,恩。 site1.myapp.com或site2.myapp.com,然后将其重定向到该网站...
这是可能吗??或者我应该去了解这一个完全不同的方式? :)
我应该指出,当涉及到应用程序的一般使用我的子域的中间件,以确保用户始终只能访问子域(和数据),他们的账户是有效的。
我想使用子域名的原因是为了让简单的用户记住他们的帐户链接,同时保持具有保持只有一个Django应用程序的优点。
谢谢。希望你能帮助:)
亲切的问候。
皮特
在Django中你有sites的概念。你可以创建自己的log in view。如果这还不够,你可以创建自己的authentification backend。
我知道这个问题是旧的,但由于谷歌把我带到这里,我将添加这些链接
此答案倒是(A)横跨子域的认证和(b)检测该子域是在使用中的潜在用户重定向
A.1。如果你想允许所有(通配符)子域* .myapp.com,这是通过添加一行到settings.py中实现:
SESSION_COOKIE_DOMAIN=".myapp.com"
详细here (SO, 2009),here (SO, 2010)和in Django docs
注意:登录现在不能在本地主机工作,所以你有两个选择,如果您需要登录和退出在localhost: 1:注释掉settings.py该行,或 2:修改你的/ etc / hosts文件,包括以下内容:
127.0.0.1 localhost 127.0.0.1 dev.myapp.com
现在你可以在浏览器中访问
dev.myapp.com
,它会实际上是在说为127.0.0.1,不是你住的网站。 (现在,整个dev.myapp.com
,site1.myapp.com
,site2.myapp.com
和myapp.com
,如果你登录/注销一个的,你会在/脱离这一切被记录。)
A2。如果你想允许刚刚那两个子域,即之间的交叉认证,他们将不会被记录到site3.myapp.com
,那么它得到a bit more complicated
B.要查看正在使用的子域有票友包来管理Django的子域,但你可以只是看在粗制滥造request.META [“HTTP_HOST”]:
try:
http_host = request.META['HTTP_HOST']
# alternative: http_host = request.get_host()
except KeyError:
http_host = None
print "Can't find HTTP_HOST"
if http_host and '.myapp.com' in http_host:
subdomain = http_host.split('.myapp.com')[0]
else:
subdomain = ''
然后检查,如果你很高兴使用这种request.user
的subdomain
。使用类似HttpResponseRedirect
如果你喜欢把它们发送到不同的子域。如果你做了A.1或A.2以上,在您的应用程序的眼中,它们是相同的用户(已登录)在新subdomain.myapp.com被重定向后(他们没有登录再次)。
例如:如果用户创建与ireland.myapp.com一个帐户,你想保持他们总是在该网站上,然后当他们尝试访问usa.myapp.com,他们仍然可以登录,就可以发现它们,并将它们送回ireland.myapp.com(虚构的例子,不是为了移民比喻!)