使用Facebook登录的Django自定义用户模型

使用Facebook登录的Django自定义用户模型,django,Django,在客户端,我使用iOS SDK for Facebook登录,并获得Facebook ID和访问令牌 现在,在Django方面,我想创建一个用户,使用FacebookID作为主要标识符,以及访问令牌、名字、姓氏等其他字段(最后两个字段我将从服务器端的GraphAPI中检索) 我知道我必须创建一个自定义用户模型 如果希望存储与用户相关的信息,则可以使用与包含其他信息字段的模型的一对一关系。此一对一模型通常称为概要文件模型,因为它可能存储有关站点用户的非身份验证相关信息 这还不够,因为我将使用Fac

在客户端,我使用iOS SDK for Facebook登录,并获得Facebook ID和访问令牌

现在,在Django方面,我想创建一个用户,使用FacebookID作为主要标识符,以及访问令牌、名字、姓氏等其他字段(最后两个字段我将从服务器端的GraphAPI中检索)

我知道我必须创建一个自定义用户模型

如果希望存储与用户相关的信息,则可以使用与包含其他信息字段的模型的一对一关系。此一对一模型通常称为概要文件模型,因为它可能存储有关站点用户的非身份验证相关信息

这还不够,因为我将使用Facebook ID和访问令牌进行身份验证

这给了我两个选择:我可以像这样替换自定义用户模型:

AUTH_USER_MODEL = 'myapp.MyUser'
或者我可以将AbstractUser子类化:

如果您对Django的用户模型非常满意,并且只想 添加一些额外的概要信息,您可以简单地将 django.contrib.auth.models.AbstractUser并添加自定义配置文件 田地

但这听起来也不太正确。这个设计技巧也让我更加困惑

模型设计考虑事项 在处理与自定义用户模型中的身份验证不直接相关的信息之前,请仔细考虑。最好将特定于应用程序的用户信息存储在与用户模型相关的模型中


实现我要做的事情的最佳方式是什么?

如果您的用户应该能够使用用户名、邮件和密码登录/注册->使用与django的usermodel的关系来存储facebook凭据

如果您的用户模型完全依赖于facebook数据,并且您不希望您的用户使用用户名/pass->登录,请使用
AUTH\u USER\u MODEL='myapp.MyUser'
替换用户模型


您可能还想看看,在一个可爱的小软件包中,哪些解决了您的大部分问题。

只是一个旁注:自定义用户的问题是,通常情况下,其他应用程序(是的,您将使用它们)由于对auth的基本模型所作的假设而无法与之正确交互

这还不够,因为我将使用Facebook ID和访问令牌进行身份验证

我不确定您是否真的需要自定义用户。例如,我使用的是身份验证,使用默认用户没有问题:只有另一个模型与默认用户有OneToOne关系

对于用于身份验证(以及一般身份验证)的Facebook ID,您应该关注的主要问题是拥有一个自定义的身份验证后端,该后端具有自己特定的Facebook身份验证

在内部,运行所有已安装的后端(
settings.AUTHENTICATION\u backends
),并尝试使用其中一个对用户进行身份验证


您可以搜索一些现有的实现,例如在。

我的印象是,只有当附加字段只是附加信息而不是身份验证所需的字段时,使用OneToOne关系才会有所帮助。我已经研究了自定义身份验证后端,但我首先想知道如何设置我的用户模型。是的,我的答案是Facebook身份验证应该是一个额外的身份验证。举例来说,你正在测试你的网站离线(没有网络)的情况。您无法通过身份验证对其进行测试。是否需要额外的身份验证?那么,在我的情况下,最低身份验证是什么呢?Django的默认值(用户名+密码)。您甚至不能允许普通用户以这种方式进行身份验证(例如,通过设置随机的10位密码)。默认设置之所以好有几个原因:其他应用程序是开箱即用的;认证系统还控制员工/主持人;它用于contrib.admin等。我不需要密码或用户名,因为用户将通过Facebook登录。那么你会建议一个
AUTH\u USER\u模型