В __init__() отсутствует 1 необходимый позиционный аргумент: ошибка 'get_response' на решении Django HttpOnly JWT
В настоящее время у меня есть установка Django, которая следует руководству, приведенному ниже. В основном, это обходной путь, который позволяет использовать HTTPOnly cookies для аутентификации Django Rest Framework JWT. Это прекрасно работало в Django 3.2, но я пытаюсь перейти на Django 4, и теперь я сталкиваюсь с ошибкой ниже
Как хранить JWT-токены в HttpOnly cookies с помощью пакета DRF djangorestframework-simplejwt?
Ошибка:
__init__() missing 1 required positional argument: 'get_response'
Я все еще немного новичок в Django и DRF, поэтому я понятия не имею, что может происходить.
Редактирование:
Прошу прощения, забыл добавить некоторые детали. Ошибка находится в следующем коде, на CSRFCheck():
def enforce_csrf(request):
# Enforce CSRF validation.
check = CSRFCheck()
check.process_request(request)
# populates request.META['CSRF_COOKIE'], which is used in process_view()
reason = check.process_view(request, None, (), {})
if reason:
# CSRF failed, bail with explicit error message
raise exceptions.PermissionDenied('CSRF Failed: %s' % reason)
Сообщения об ошибках:
/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py, строка 55, in inner
return inner
else:
@wraps(get_response)
def inner(request):
try:
response = get_response(request)
…
except Exception as exc:
response = response_for_exception(request, exc)
return response
return inner
Локальные переменные /usr/local/lib/python3.8/site-packages/django/core/handlers/base.py, строка 197, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)
…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Локальные переменные /usr/local/lib/python3.8/site-packages/django/views/decorators/csrf.py, строка 54, in wrapped_view
def csrf_exempt(view_func):
"""Mark a view function as being exempt from the CSRF view protection."""
# view_func.csrf_exempt = True would also work, but decorators are nicer
# if they don't have side effects, so return a new function.
def wrapped_view(*args, **kwargs):
return view_func(*args, **kwargs)
…
wrapped_view.csrf_exempt = True
return wraps(view_func)(wrapped_view)
Локальные переменные /usr/local/lib/python3.8/site-packages/django/views/generic/base.py, строка 84, in view
self = cls(**initkwargs)
self.setup(request, *args, **kwargs)
if not hasattr(self, "request"):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
…
view.view_class = cls
view.view_initkwargs = initkwargs
# __name__ and __qualname__ are intentionally left unchanged as
# view_class should be used to robustly determine the name of the view
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 509, in dispatch
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs)
except Exception as exc:
response = self.handle_exception(exc)
…
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
def options(self, request, *args, **kwargs):
"""
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 469, in handle_exception
exception_handler = self.get_exception_handler()
context = self.get_exception_handler_context()
response = exception_handler(exc, context)
if response is None:
self.raise_uncaught_exception(exc)
…
response.exception = True
return response
def raise_uncaught_exception(self, exc):
if settings.DEBUG:
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 480, in raise_uncaught_exception
def raise_uncaught_exception(self, exc):
if settings.DEBUG:
request = self.request
renderer_format = getattr(request.accepted_renderer, 'format')
use_plaintext_traceback = renderer_format not in ('html', 'api', 'admin')
request.force_plaintext_errors(use_plaintext_traceback)
raise exc
…
# Note: Views are made CSRF exempt from within `as_view` as to prevent
# accidental removal of this exemption in cases where `dispatch` needs to
# be overridden.
def dispatch(self, request, *args, **kwargs):
"""
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 497, in dispatch
self.args = args
self.kwargs = kwargs
request = self.initialize_request(request, *args, **kwargs)
self.request = request
self.headers = self.default_response_headers # deprecate?
try:
self.initial(request, *args, **kwargs)
…
# Get the appropriate handler method
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 414, in initial
request.accepted_renderer, request.accepted_media_type = neg
# Determine the API version, if versioning is in use.
version, scheme = self.determine_version(request, *args, **kwargs)
request.version, request.versioning_scheme = version, scheme
# Ensure that the incoming request is permitted
self.perform_authentication(request)
…
self.check_permissions(request)
self.check_throttles(request)
def finalize_response(self, request, response, *args, **kwargs):
"""
Returns the final response object.
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/views.py, строка 324, in perform_authentication
"""
Perform authentication on the incoming request.
Note that if you override this and simply 'pass', then authentication
will instead be performed lazily, the first time either
`request.user` or `request.auth` is accessed.
"""
request.user
…
def check_permissions(self, request):
"""
Check if the request should be permitted.
Raises an appropriate exception if the request is not permitted.
"""
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/request.py, строка 227, in user
def user(self):
"""
Returns the user associated with the current request, as authenticated
by the authentication classes provided to the request.
"""
if not hasattr(self, '_user'):
with wrap_attributeerrors():
self._authenticate()
…
return self._user
@user.setter
def user(self, value):
"""
Sets the user on the current request. This is necessary to maintain
Локальные переменные /usr/local/lib/python3.8/site-packages/rest_framework/request.py, строка 380, in _authenticate
def _authenticate(self):
"""
Attempt to authenticate the request using each authentication instance
in turn.
"""
for authenticator in self.authenticators:
try:
user_auth_tuple = authenticator.authenticate(self)
…
except exceptions.APIException:
self._not_authenticated()
raise
if user_auth_tuple is not None:
self._authenticator = authenticator
Локальные переменные /django/users/authenticate.py, строка 30, in authenticate
if header is None:
raw_token = request.COOKIES.get(settings.SIMPLE_JWT['AUTH_COOKIE']) or None
else:
raw_token = self.get_raw_token(header)
if raw_token is None:
return None
validated_token = self.get_validated_token(raw_token)
enforce_csrf(request)
…
return self.get_user(validated_token), validated_token
Локальные переменные /django/users/authenticate.py, строка 10, in enforce_csrf
from rest_framework.authentication import CSRFCheck
from rest_framework import exceptions
def enforce_csrf(request):
# Enforce CSRF validation.
check = CSRFCheck()
…
check.process_request(request)
# populates request.META['CSRF_COOKIE'], which is used in process_view()
reason = check.process_view(request, None, (), {})
if reason:
# CSRF failed, bail with explicit error message
Приведенная ниже ссылка на стек может помочь вам
MiddlewareMixin missing required argument: 'get_response' django