【问题标题】:django-oauth2-provider with custom user model?具有自定义用户模型的 django-oauth2-provider?
【发布时间】:2014-10-03 23:52:55
【问题描述】:

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

有什么方法可以使用我的自定义用户模型来创建客户端和令牌?

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

此致,

苏珊特·卡尔基

【问题讨论】:

  • 是否可以使用您的自定义模型扩展默认用户模型? (对django-oauth2-provider不熟悉)但是我认为这样可以让django-oauth2-provider正常工作。

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


【解决方案1】:

正如前面的答案所建议的,您应该从django.contrib.auth.models 扩展AbstractUser。

当更改设置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. 运行python manage.py makemigrations
  5. 运行python manage.py migrate

现在,django-oauth2-provider 表已连接到 RIGHT User 模型。

【讨论】:

    【解决方案2】:

    django-oauth2-providerfetches the user model using settings.AUTH_USER_MODEL, with a fallback to auth.User。如果您扩展 AbstractUser,您的 User 模型将包括 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.

    【讨论】:

    • 我按照你提到的方式做了。但我仍然遇到访问令牌创建问题
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2012-06-28
    • 2014-02-07
    • 2015-06-18
    相关资源
    最近更新 更多