Django:如何存储基于子域的身份验证用户名?

rz.*_*rz. 7 authentication django subdomain

我需要创建一个基于子域的身份验证系统,比如37signals,freshbooks,codebase使用.也就是说,我的主应用程序的每个子域都需要有自己的用户名空间.我想尽可能多地保留django身份验证系统.

存储用户名的好方法是什么?

特别是,只要其帐户属于不同的子域,不同用户应该可以拥有相同的用户名.

我考虑过的一些方法,我可以预见它们的缺点:

  • 在django auth用户模型的用户名字段中存储一些前缀.
  • 根据扩展用户模型.
  • 根据我的需求定制auth的来源

ric*_*and 1

我认为这可能是将 django.contrib.sites 与您提到的第二个项目符号结合使用的一个很好的用例。您可以像这样创建一个 CustomUser 模型:

from django.contrib.sites.models import Site

class CustomUser(User):
    """User with app settings."""
    sites = models.ManyToManyField(Site)
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写一个自定义身份验证后端来检查用户是否可以使用提供的凭据登录当前子域。这允许您为多个站点(子域)使用一个用户名,而无需破解内部身份验证应用程序或使用自定义前缀存储多个用户名。

编辑:您可以使用获取当前站点Site.objects.get_current(),然后检查当前站点是否在用户的站点中。

您可以在此处阅读有关站点框架的更多信息:http://docs.djangoproject.com/en/dev/ref/contrib/sites/