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之间创建一个关键约束。

解决方案非常简单:

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

另一答案

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

AngularJS 2 Provider

UIRefreshControl 闪烁与自定大小的单元格

结构化程序与自定函数

ios UITableView 与 fetchedresultscontroller - 添加自定义行

iOS UICollectionView 与自定尺寸项目错误?