Django的:是否有可能一个用户登录到一个子域,从另一个域?

问题描述 投票:2回答:2

事情是。我有服务于不同的网站一个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 session login subdomain
2个回答
0
投票

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


7
投票

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

此答案倒是(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.comsite1.myapp.comsite2.myapp.commyapp.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.usersubdomain。使用类似HttpResponseRedirect如果你喜欢把它们发送到不同的子域。如果你做了A.1或A.2以上,在您的应用程序的眼中,它们是相同的用户(已登录)在新subdomain.myapp.com被重定向后(他们没有登录再次)。

例如:如果用户创建与ireland.myapp.com一个帐户,你想保持他们总是在该网站上,然后当他们尝试访问usa.myapp.com,他们仍然可以登录,就可以发现它们,并将它们送回ireland.myapp.com(虚构的例子,不是为了移民比喻!)

© www.soinside.com 2019 - 2024. All rights reserved.