Возникли проблемы при использовании JWT с пользовательской моделью пользователя в Django
Я запустил новый проект Django и, как рекомендует документация, создал пользовательскую модель на тот случай, если она понадобится, и обязательно установите AUTH_USER_MODEL
в настройках.
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
Я замечаю, что когда вы делаете это, вы не можете бежать python manage.py makemigrations
вы на самом деле должны указать приложение, в котором находится пользовательская модель python manage.py makemigrations <appname>
, Как только я это сделаю, я смогу запустить сервер.
Я последовал за этим постом, чтобы интегрировать JWT в мой новый проект: Django React JWT
Без пользовательской модели публикация работает отлично, но как только я добавляю пользовательскую модель, я получаю следующие ошибки:
Traceback (most recent call last):
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/views/generic/base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/views.py", line 483, in dispatch
response = self.handle_exception(exc)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/views.py", line 443, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/views.py", line 480, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/repos/api/core/views.py", line 30, in post
if serializer.is_valid():
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 236, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 434, in run_validation
value = self.to_internal_value(data)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 482, in to_internal_value
fields = self._writable_fields
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/django/utils/functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 370, in _writable_fields
field for field in self.fields.values() if not field.read_only
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 363, in fields
for key, value in self.get_fields().items():
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/serializers.py", line 1019, in get_fields
info = model_meta.get_field_info(model)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/utils/model_meta.py", line 39, in get_field_info
forward_relations = _get_forward_relationships(opts)
File "/Users/.local/share/virtualenvs/api-RqAznZCl/lib/python3.7/site-packages/rest_framework/utils/model_meta.py", line 96, in _get_forward_relationships
not field.remote_field.through._meta.auto_created
AttributeError: 'NoneType' object has no attribute '_meta'
Похоже, что ti имеет какое-то отношение к сериализатору, так как я использовал pdb для трассировки, и токен генерировался, но переданный обратно пользовательский объект не сериализуется должным образом...
1 ответ
Похоже, библиотека djangorestframework-jwt занимает User
модель из get_user_model
так что убедитесь, что у вас есть AUTH_USER_MODEL
указывая на ваш пользовательский класс модели пользователя.