django:是否可以将用户从另一个域登录到子域?

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应用程序的优点.

谢谢.希望你能帮忙:)

亲切的问候.

皮特

Mar*_*ark 7

我知道这个问题已经过时了,但是由于谷歌把我带到了这里,我会添加这些链接

这个答案涉及(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文件以包含下列:

127.0.0.1 localhost
127.0.0.1 dev.myapp.com 
Run Code Online (Sandbox Code Playgroud)

现在您可以dev.myapp.com在浏览器中访问,它实际上将与127.0.0.1通信,而不是您的实时网站.(现在,跨越dev.myapp.com,site1.myapp.com, site2.myapp.commyapp.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(虚构的例子,不是移民的比喻!)