Pet*_*ler 2 django subdomain session login
事情是.我有一个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应用程序的优点.
谢谢.希望你能帮忙:)
亲切的问候.
皮特
我知道这个问题已经过时了,但是由于谷歌把我带到了这里,我会添加这些链接
这个答案涉及(A)跨子域的身份验证和(B)检测正在使用哪个子域以潜在地重定向用户
A.1.如果要允许所有(通配符)子域*.myapp.com,可以通过向settings.py添加一行来实现:
SESSION_COOKIE_DOMAIN=".myapp.com"
这里详细介绍(SO,2009),这里(SO,2010)和Django文档
注意:现在登录将无法在localhost上运行,因此如果您需要在localhost上登录和退出,则有两种选择:
1:在settings.py中注释掉该行,或者
2:修改/ etc/hosts文件以包含下列:Run Code Online (Sandbox Code Playgroud)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,那么它会变得有点复杂
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 = ''
Run Code Online (Sandbox Code Playgroud)
然后检查你是否对request.user使用它感到满意subdomain.HttpResponseRedirect如果您愿意,可以使用类似的方式将它们发送到不同的子域.如果您已经完成了上面的A.1或A.2,那么在您的应用程序中,它们在被重定向后是新的subdomain.myapp.com中的同一用户(已经登录)(他们不必登录)再次).
示例:如果用户使用ireland.myapp.com创建帐户并且您希望始终将其保留在该网站上,那么当他们尝试访问usa.myapp.com时,他们仍然会登录,您可以识别它们并且把它们发回ireland.myapp.com(虚构的例子,不是移民的比喻!)
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |