Django自定义用户模型验证

问题描述:

由于我没有使用Django的Auth用户,我有我自己的模型CustomUser,并且我想通过这个模型在网站上进行身份验证(CustomUser不会从用户模型继承,并且与其无关所有)。Django自定义用户模型验证

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 

我需要导入Django的用户,如果我想用我的CustomUser?

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

* 编辑: 我知道我可以与用户扩展。但我不想那样。问题不是:什么是最好的方式来使用用户和存储额外的信息等等我欣赏它。 但我如何使用自定义用户而不使用Auth用户。即使我没有理由。 *

如果可能我想知道如何。

+0

你是什么意思“使用自定义用户”?你可以使用'login_required'装饰器吗?是的,如果您的'CustomUser'提供'is_authenticated'方法,则不会过度。你能使用权限吗?没有。等等。你想使用Django认证系统的哪一部分? – DrTyrsa 2012-04-25 10:46:41

+0

通常您会使用Auth用户来创建用户。我使用CustomUser来创建用户,如上所示。我想使用login_required和is_authenticated。没有权限。 – nelsonvarela 2012-04-25 12:00:12

+0

我一直在疯狂试图自己回答这个问题。我需要认证用户和自定义的“认证帐户”。我听到每个人都在说“在用户表中填充它并设置一个”帐户“组”,但我不想那么做。你发生了什么事@nelsonvarela?你有没有找到你正在寻找的答案? – 2014-08-19 17:26:41

整个Django认证系统与django.contrib.auth.models.User紧密结合,所以你应该在后端使用它。引用Django docs

现在,对付它的最好方法是创建一个Django的User对象存在的后端每个用户

但这里的主要问题是:您的CustomUser有什么特别之处,您无法使用正常User型号(可能会扩展)来执行? 99%的案例使用User是最好的方法。

+1

我没有特别的原因。我只想知道我该如何做到这一点 – nelsonvarela 2012-04-25 10:28:53

+2

我能想到的用例是设备认证。我可能需要一个服务来验证设备和用户。 – Erik 2012-07-08 22:30:24

看看这篇文章。

大多数Django的项目,我需要上工作来存储除了由contrib.auth.models.User模型所保持的标准名称和电子邮件地址,每个用户的信息。

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

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

和这个职位。

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

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

+0

你可以引用链接的一些基本点来显示人们在点击链接之前的内容。 – okm 2012-04-25 10:02:45

这也许回答你的问题:

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

代定制的用户模型 新在Django 1.5。 某些类型的项目可能具有身份验证要求,而Django的内置User模型并非总是合适的。例如,在一些网站上,使用电子邮件地址作为您的身份标记而不是用户名更有意义。

的Django允许您通过引用定制模式AUTH_USER_MODEL设置提供值来覆盖默认的用户模式:

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

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

干杯!