django-oauth2-провайдер с пользовательской моделью?
Я действительно застрял в своем проекте прямо сейчас. Я пытаюсь реализовать Oauth2 для моего приложения. Я много узнал о django-oauth2-провайдере и попробовал. Единственная проблема заключается в том, что он использует модель User на django.contrib.auth. Основные пользователи нашего сайта сохраняются в пользовательской модели под названием Пользователь, которая не наследует и не расширяет модель по адресу django.contrib.auth.
Можно ли использовать мою пользовательскую модель для создания клиентов и токенов?
Если django-oauth2-provider не может быть использован для этой цели, кто-нибудь может порекомендовать мне какую-нибудь библиотеку oauth2 с возможностью реализации oauth2 с моей собственной моделью.
С уважением,
Сушант Карки
3 ответа
Как и предполагал предыдущий ответ, вы должны продлить AbstractUser
от django.contrib.auth.models
,
Проблема с токеном доступа, на который ссылается OP, возникает при изменении настройки AUTH_USER_MODEL
ПОСЛЕ django-oauth2-provider
был перенесен.
когда django-oauth2-provider
после переноса создает ключевое ограничение между моделью User и провайдером django-oauth2.
Решение очень простое:
- Создайте новую модель пользователя и измените
AUTH_USER_MODEL
установка. - Перейти к
django_migration
таблица в вашей базе данных. - Удалить все строки
django-oauth2-provider
, - бежать
python manage.py makemigrations
- бежать
python manage.py migrate
Теперь django-oauth2-provider
таблицы подключены к модели RIGHT User.
https://github.com/caffeinehit/django-oauth2-provider выбирает модель пользователя, используяsettings.AUTH_USER_MODEL
с отступлением к 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
Вы можете прочитать больше о способах настройки пользовательской модели django здесь.
братан, я столкнулся с той же проблемой, я точно знаю, как создать собственную модель пользователя с помощью Oauth2.
теперь я использую SimpleJWT для аутентификации
вы можете проверить эту документацию, это поможет решить вашу проблему, нажмите здесь