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

时间:2013-08-27 06:31:33

标签: django

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

现在在Django方面,我想创建一个用户身份,将Facebook ID作为主要标识符,以及其他字段,如访问令牌,名字,姓氏等(我将从Graph API中检索最后两个字段)在服务器端)。

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

  

如果您希望存储与用户相关的信息,您可以使用与包含这些字段的模型的一对一关系以获取其他信息。这种一对一模型通常称为配置文件模型,因为它可能存储有关站点用户的非身份验证相关信息。

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

这给我留下了两个选择:我可以替换自定义用户模型,如下所示:

AUTH_USER_MODEL = 'myapp.MyUser'

或者我可以继承AbstractUser:

  

如果您对Django的用户模型完全满意并且您只是想要   添加一些额外的配置文件信息,您可以简单地子类   django.contrib.auth.models.AbstractUser并添加您的自定义配置文件   领域。

但这听起来也不是很正确。此设计提示也使我更加困惑。

  

模型设计考虑因素   在处理与自定义用户模型中的身份验证无直接关系的信息之前,请仔细考虑。将特定于应用程序的用户信息存储在与用户模型有关系的模型中可能更好。

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

2 个答案:

答案 0 :(得分:1)

只是旁注:自定义用户的问题在于,由于他们在基础模型上做出的假设,通常会出现其他应用程序(是的,您将使用它们)与其无法正确交互的情况。对于身份验证。

  

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

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

您应该对Facebook ID进行身份验证(以及一般身份验证)的主要问题是拥有自定义身份验证后端,并具有自己的特定Facebook身份验证。

在内部,authenticate()会遍历所有已安装的后端(settings.AUTHENTICATION_BACKENDS)并尝试使用其中一个进行身份验证。

您可以搜索一些现有的实施,例如在Django packages for facebook authentication

答案 1 :(得分:0)

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

如果您的用户模型完全依赖于Facebook数据,并且您不希望您的用户使用username / pass登录 - >用AUTH_USER_MODEL = 'myapp.MyUser'替换usermodel。

你可能还想看一下django-allauth,它可以解决你的一些小问题。

相关问题