如何在我的应用程序中实现内置的django auth和第三方social-auth?

时间:2016-10-28 19:44:25

标签: django authentication django-models django-rest-framework

我使用过去4-5个月的django并且最近开始学习django-rest-framework并且我对正确的身份验证系统感到困惑, 实际上我正在尝试构建一个主要使用REST API的应用程序,因为我的 客户端可以是浏览器和Android, 所以我需要一个身份验证系统,用户可以使用django进行注册 内置身份验证(django.contrib.auth.model.User)以及第三方社交 身份验证(谷歌,Facebook等)。

现在,我对如何创建数据库感到困惑,因为我什么时候创建数据库 一个表/模型可以说是一个' Book'然后这个模型需要一个用户模型的外键,这里用户可以是' django.contrib.auth.model.User'和用户使用第三方身份验证进行注册,

那么我将如何在我的模型的外键字段中引用User?

我还决定定制django的buit-in auth,因为我想要 用户使用他们的电子邮件而非用户名登录。

class Book(models.Model):
  title = models.CharField(...)
  author = models.ForeignKey(?) ? Here, how do i refer to both
                                 'django.contrib...User' and users signed-up                     
                                 using thrid-party auth.

1 个答案:

答案 0 :(得分:0)

让我详细说明你的问题。 首先:你很幸运。这是(几乎)开箱即用的问题。

对于社交和普通身份验证和注册,包括电子邮件验证等,您可以依赖django-allauth:

https://github.com/pennersr/django-allauth

django-restauth提供了一个建立在all-auth之上的宁静平台,因此你甚至不必从头开始构建你的auth rest api:

https://github.com/Tivix/django-rest-auth

说到数据库架构,有几个选项。您可以继续构建自己的身份验证系统,在我看来,这个系统有点过分。 更确切地说,我将实现一个配置文件模型,该模型与django.contrib.auth.models.User中的User模型具有OneToOne关系,如Django文档的this chapter中所述。

您的模型(当然是在分开的应用中)看起来像这样:

from django.contrib.auth.models import User
from django.db import models
#other imports

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')
    books_read = models.IntegerField(default=0)
    books_recommended = models.IntegerField(default=0)

class Book(models.Model):
    title = models.CharField(...)
    author = models.ForeignKey('UserProfile', related_name='books')

您将遇到的另一个问题是如何在序列化程序中更新和/或显示这些嵌套关系。

来自django-restauth docs的{p> This FAQ article和官方django-rest_framework文档中的this chapter将让你快速启动。

最佳, d