我现在真的陷入了我的项目。我正在尝试为我的应用程序实现Oauth2。我发现了很多django-oauth2-provider并尝试过。唯一的问题是,它使用django.contrib.auth上的User模型。我们网站的主要用户保存在名为User的自定义模型中,该模型不会从django.contrib.auth继承或扩展模型。
有没有办法使用我的自定义用户模型来创建客户端和令牌?
如果django-oauth2-provider无法用于此目的,那么任何人都可以向我推荐一些oauth2库,并可以选择使用我自己的模型实现oauth2。
此致
Sushant Karki
答案 0 :(得分:4)
正如之前的回答所示,您应该从AbstractUser
扩展django.contrib.auth.models
。
在迁移设置AUTH_USER_MODEL
AFTER 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用户模型。
答案 1 :(得分: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