django-oauth2-provider с пользовательской моделью?

Я действительно застрял в своем проекте прямо сейчас. Я пытаюсь реализовать Oauth2 для своего приложения. Я много узнал о django-oauth2-provider и попробовал его. Единственная проблема в том, что он использует модель пользователя в django.contrib.auth. Основные пользователи нашего сайта сохраняются в пользовательской модели с именем User, которая не наследует и не расширяет модель django.contrib.auth.

Есть ли способ использовать мою пользовательскую модель пользователя для создания клиентов и токена?

Если django-oauth2-provider нельзя использовать для этой цели, может ли кто-нибудь порекомендовать мне какую-нибудь библиотеку oauth2 с возможностью реализации oauth2 с моей собственной моделью.

Искренне,

Сушант Карки


person suzzant    schedule 11.08.2014    source источник
comment
Можно ли расширить пользовательскую модель по умолчанию с помощью вашей пользовательской модели? (не знаком с django-oauth2-provider) Но думаю это позволит нормально работать django-oauth2-provider.   -  person Eagllus    schedule 11.08.2014


Ответы (2)


Как было предложено в предыдущем ответе, вы должны расширить AbstractUser из django.contrib.auth.models.

Проблема с токеном доступа, на который ссылается OP, возникает при изменении параметра AUTH_USER_MODEL ПОСЛЕ django-oauth2-provider переноса.

Когда 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.

person Gal Silberman    schedule 26.12.2017

django-oauth2-provider извлекает модель пользователя, используя settings.AUTH_USER_MODEL, с откатом к 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

Вы можете узнать больше о способах настройки пользовательская модель django здесь.

person Joar Leth    schedule 17.09.2014
comment
Я сделал это так, как вы упомянули. Но все же у меня возникает проблема с созданием токена доступа. - person ; 25.05.2015