django-oauth2-provider与自定义用户模型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django-oauth2-provider与自定义用户模型?相关的知识,希望对你有一定的参考价值。
我现在真的陷入了我的项目。我正在尝试为我的应用程序实现Oauth2。我发现了很多django-oauth2-provider并尝试过。唯一的问题是,它使用django.contrib.auth上的User模型。我们网站的主要用户保存在名为User的自定义模型中,该模型不会从django.contrib.auth继承或扩展模型。
有没有办法使用我的自定义用户模型来创建客户端和令牌?
如果django-oauth2-provider不能用于此目的,任何人都可以向我推荐一些oauth2库,可以选择用我自己的模型实现oauth2。
此致
Sushant Karaki
如前面的答案所示,你应该从AbstractUser
扩展django.contrib.auth.models
。
在迁移AUTH_USER_MODEL
之后更改设置django-oauth2-provider
时,会发生OP引用的访问令牌的问题。
迁移django-oauth2-provider
时,它会在User模型和django-oauth2-provider之间创建一个关键约束。
解决方案非常简单:
- 创建新的用户模型并更改
AUTH_USER_MODEL
设置。 - 转到数据库中的
django_migration
表。 - 删除所有
django-oauth2-provider
行。 - 运行
python manage.py makemigrations
- 运行
python manage.py migrate
现在,django-oauth2-provider
表连接到RIGHT用户模型。
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。
以上是关于django-oauth2-provider与自定义用户模型?的主要内容,如果未能解决你的问题,请参考以下文章
Django/tastypie 实现中的 OAuth 2.0 客户端 ID