Django自定义用户模型身份验证

时间:2012-04-25 09:22:53

标签: django django-admin django-authentication

由于我没有使用Django的Auth User,我有自己的模型CustomUser,我希望通过这个模型在网站上进行身份验证(CustomUser不会从用户模型继承并且根本不与它相关)。

class CustomUser(models.Model):
    password = models.CharField(max_length = 40)
    email = models.EmailField(max_length = 72, unique = True)
    #stuff...

我查了https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend,我不明白的主要是:

from django.contrib.auth.models import User

如果我想使用CustomUser,是否需要导入Django用户?

我找不到一个很好的教程,它解释了如何在没有标准Auth用户的情况下使用Django。

* 修改: 我知道我可以扩展用户。但我只是不想那样。问题不是:什么是使用用户和存储其他信息等的最佳方式。我很欣赏它。 但是如何在不使用Auth用户的情况下使用自定义用户。即使我没有理由。 *

如果有可能我想知道如何。

3 个答案:

答案 0 :(得分:1)

整个Django auth系统与django.contrib.auth.models.User紧密耦合,因此您应该在后端使用它。引用Django docs

  
    

目前,处理此问题的最佳方法是为后端存在的每个用户创建一个Django User对象

  

但这里的主要问题是:你的CustomUser有什么特别之处,你无法用普通的User模型实现(可能会扩展)?使用User的99%的案例是最好的方式。

答案 1 :(得分:0)

查看这篇文章。

  

除了contrib.auth.models.User模型所持有的标准名称和电子邮件地址之外,我参与过的大多数Django项目都需要存储有关每个用户的信息。

     

如果您在修订版7477(2008年4月26日)中使用trunk,则您的模型类可以继承现有的模型类。其他字段存储在单独的表中,该表链接到基本模型的表。检索模型时,查询使用连接从中获取字段和基本模型。

http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

这篇文章。

  

将auth应用程序复制到您自己的项目中并根据您的需要进行修改。这避免了一些维护问题,但是首先取消了Django捆绑auth系统的实用程序。它还可能导致与其他应用程序的兼容性问题,这些应用程序期望User模型位于django.contrib.auth中。

http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

答案 2 :(得分:0)

也许这回答了你的问题:

来自' https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#substituting-a-custom-user-model':

  

替换自定义用户模型   Django 1.5中的新功能。   某些类型的项目可能具有Django的内置用户模型并不总是适合的身份验证要求。例如,在某些网站上,使用电子邮件地址作为您的身份识别令牌而不是用户名更为合理。

     

Django允许您通过为引用自定义模型的AUTH_USER_MODEL设置提供值来覆盖默认的User模型:

     

AUTH_USER_MODEL =' myapp.MyUser'   这个虚线对描述了Django应用程序的名称(必须在您的INSTALLED_APPS中),以及您希望用作用户模型的Django模型的名称。

当然需要考虑一些必要的警告(可在上面的链接中找到),但这看起来像是对你的问题的一个很好的答案:https://docs.djangoproject.com/en/1.6/ref/settings/#auth-user-model

还需要考虑一些自定义模型合规性预期(此处列出的内容太多):https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#specifying-a-custom-user-model

除非AUTH_USER_MODEL可以有多个值(我怀疑这是理智的),我认为我需要构建自己的自定义身份验证后端:https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#writing-an-authentication-backend

我希望这可以帮助那些需要不同用户和设备身份验证方案的其他任何失去的灵魂(可能是因为一些预先存在的规范使得混乱变得太容易了)。

干杯!