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

时间:2014-08-11 08:03:25

标签: python django oauth django-rest-framework django-oauth

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

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

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

此致

Sushant Karki

2 个答案:

答案 0 :(得分:4)

正如之前的回答所示,您应该从AbstractUser扩展django.contrib.auth.models

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

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

解决方案非常简单:

  1. 创建新的用户模型并更改AUTH_USER_MODEL设置。
  2. 转到数据库中的django_migration表。
  3. 删除django-oauth2-provider
  4. 的所有行
  5. 运行python manage.py makemigrations
  6. 运行python manage.py migrate
  7. 现在,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