3

我现在真的被困在我的项目中。我正在尝试为我的应用程序实现 Oauth2。我发现了很多关于 django-oauth2-provider 并尝试了它。唯一的问题是,它使用了 django.contrib.auth 中的 User 模型。我们站点的主要用户保存在一个名为 User 的自定义模型中,该模型不继承或扩展 django.contrib.auth 中的模型。

有什么方法可以使用我的自定义用户模型来创建客户端和令牌?

如果 django-oauth2-provider 不能用于此目的,任何人都可以向我推荐一些 oauth2 库,可以选择用我自己的模型实现 oauth2。

真挚地,

苏珊特·卡尔基

4

2 回答 2

5

正如前面的答案所建议的,您应该AbstractUserdjango.contrib.auth.models.

迁移AUTH_USER_MODEL 更改设置时,会出现 OP 引用的访问令牌问题。django-oauth2-provider

迁移时django-oauth2-provider,它会在 User 模型和 django-oauth2-provider 之间创建一个关键约束。

解决方案非常简单:

  1. 创建新的用户模型并更改AUTH_USER_MODEL设置。
  2. 转到django_migration数据库中的表。
  3. 删除所有行django-oauth2-provider
  4. python manage.py makemigrations
  5. python manage.py migrate

现在,这些django-oauth2-provider表已连接到 RIGHT User 模型。

于 2017-12-26T09:18:05.010 回答
1

django-oauth2-provider 使用 获取用户模型settings.AUTH_USER_MODEL,并回退到auth.User. 如果您扩展AbstractUser您的用户模型将包括所有字段auth.User以及您指定的任何其他字段。

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    some_additional_field = models.BooleanField(default=False)

指定要使用的用户模型,如下所示settings.py

AUTH_USER_MODEL = 'user_api.User'

如果您不想基于您的用户,AbstractUser您还需要编写自己的用户管理器,例如通过扩展BaseUserManager

您可以在此处阅读有关自定义 django 用户模型的方法的更多信息

于 2014-09-17T12:13:57.027 回答