django-oauth2-provider与自定义用户模型?

问题描述 投票:3回答:2

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

有没有办法使用我的自定义用户模型来创建客户端和令牌?

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

此致

Sushant Karaki

python django oauth django-rest-framework django-oauth
2个回答
4
投票

如前面的答案所示,你应该从AbstractUser扩展django.contrib.auth.models

在迁移AUTH_USER_MODEL之后更改设置django-oauth2-provider时,会发生OP引用的访问令牌的问题。

迁移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用户模型。


1
投票

django-oauth2-provider fetches the user model using settings.AUTH_USER_MODEL, with a fallback to 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

You can read more about ways to customize django's user model here

© www.soinside.com 2019 - 2024. All rights reserved.