我知道这个问题很久了,但由于谷歌把我带到这里,我会添加这些链接
这个答案涉及(A)跨子域的身份验证和(B)检测正在使用哪个子域以潜在地重定向用户
A.1 如果您想允许所有(通配符)子域名 *.myapp.com,可以通过在settings.py中添加一行来实现:
SESSION_COOKIE_DOMAIN=".myapp.com"
详细信息请参见此处(SO, 2009)、此处(SO, 2010)和Django文档
Note: login now won't work on localhost, so you have two choices if
you need to log in and out on localhost:
1: comment out that line in settings.py, or
2: amend your /etc/hosts file to include the following:
127.0.0.1 localhost
127.0.0.1 dev.myapp.com
Now you can visit dev.myapp.com
in your browser, and it'll actually be talking to 127.0.0.1, not your live
website. (Now, across dev.myapp.com
, site1.myapp.com
,
site2.myapp.com
and myapp.com
, if you log in/out of one, you'll be
logged in/out of them all.)
A.2. 如果您想仅允许这两个子域名之间的跨认证,即,他们不会登录到 site3.myapp.com
,那么它就变得有点复杂
B. 查看所使用的子域名
在Django中,有一些更加高级的包可以管理子域名,但是您也可以简单地查看 request.META['HTTP_HOST']:
try:
http_host = request.META['HTTP_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
。
如果您愿意,可以使用类似
HttpResponseRedirect
的东西将他们发送到不同的子域名。如果您已经完成了A.1或A.2,那么在应用程序看来,它们是同一个用户(已经登录),在重定向后的新的subdomain.myapp.com中(他们不必再次登录)。
例如:如果用户在ireland.myapp.com上创建了一个帐户,并且您希望始终保持在该站点上,则当他们尝试访问usa.myapp.com时,他们仍将保持登录状态,您可以识别他们并将其发送回ireland.myapp.com(虚构的例子,不是移民的比喻!)