KundaPanda / strawberry-django-jwt

[UNMAINTAINED] JSON Web Token (JWT) authentication for Django with Strawberry GraphQL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

permission_required decorator not working

uroybd opened this issue · comments

With a type definition like this:

# types.py
@type(models.User, keys=["id"], filters=UserFilter, order=UserOrder, pagination=True)
class User:
    id: auto
    username: auto
    email: auto
    first_name: auto
    last_name: auto

    @strawberry.field
    @permission_required("users.view_user")
    def permissions(self, info) -> List[str]:
        return []

I'm getting an error like this:

CollectionUsers_server | GraphQL request:1:42
CollectionUsers_server | 1 | {users{firstName lastName username email permissions}}
CollectionUsers_server |   |                                          ^
CollectionUsers_server | Traceback (most recent call last):
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/graphql/execution/execute.py", line 617, in resolve_field
CollectionUsers_server |     result = resolve_fn(source, info, **args)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/middleware.py", line 57, in resolve
CollectionUsers_server |     result = next_(root, info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/middleware.py", line 92, in resolve
CollectionUsers_server |     return next_(root, info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/schema/schema_converter.py", line 389, in _resolver
CollectionUsers_server |     return _get_result(_source, strawberry_info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/schema/schema_converter.py", line 381, in _get_result
CollectionUsers_server |     return field.get_result(
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django/fields/field.py", line 99, in get_result
CollectionUsers_server |     return super().get_result(source, info, args, kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/field.py", line 279, in get_result
CollectionUsers_server |     return self.base_resolver(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/types/fields/resolver.py", line 39, in __call__
CollectionUsers_server |     return self.wrapped_func(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 79, in wrapper
CollectionUsers_server |     return func(ctx, *args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 92, in wrapper
CollectionUsers_server |     return dispose_extra_kwargs(f)(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 324, in wrapper
CollectionUsers_server |     return fn(src, root, *args_, **passed_kwargs)
CollectionUsers_server | TypeError: permissions() got multiple values for argument 'info'
CollectionUsers_server | Stack (most recent call last):
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 890, in _bootstrap
CollectionUsers_server |     self._bootstrap_inner()
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
CollectionUsers_server |     self.run()
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 870, in run
CollectionUsers_server |     self._target(*self._args, **self._kwargs)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 650, in process_request_thread
CollectionUsers_server |     self.finish_request(request, client_address)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 360, in finish_request
CollectionUsers_server |     self.RequestHandlerClass(request, client_address, self)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 720, in __init__
CollectionUsers_server |     self.handle()
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/servers/basehttp.py", line 176, in handle
CollectionUsers_server |     self.handle_one_request()
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/servers/basehttp.py", line 201, in handle_one_request
CollectionUsers_server |     handler.run(self.server.get_app())
CollectionUsers_server |   File "/usr/lib/python3.8/wsgiref/handlers.py", line 137, in run
CollectionUsers_server |     self.result = application(self.environ, self.start_response)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/contrib/staticfiles/handlers.py", line 76, in __call__
CollectionUsers_server |     return self.application(environ, start_response)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/wsgi.py", line 133, in __call__
CollectionUsers_server |     response = self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/base.py", line 130, in get_response
CollectionUsers_server |     response = self._middleware_chain(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
CollectionUsers_server |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
CollectionUsers_server |     return self.dispatch(request, *args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
CollectionUsers_server |     return bound_method(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
CollectionUsers_server |     return view_func(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/django/views.py", line 148, in dispatch
CollectionUsers_server |     result = self.schema.execute_sync(
CollectionUsers_server | [04/Oct/2021 05:09:19] "POST /graphql HTTP/1.1" 200 175
CollectionUsers_server | permissions() got multiple values for argument 'info'
CollectionUsers_server |
CollectionUsers_server | GraphQL request:1:42
CollectionUsers_server | 1 | {users{firstName lastName username email permissions}}
CollectionUsers_server |   |                                          ^
CollectionUsers_server | Traceback (most recent call last):
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/graphql/execution/execute.py", line 617, in resolve_field
CollectionUsers_server |     result = resolve_fn(source, info, **args)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/middleware.py", line 57, in resolve
CollectionUsers_server |     result = next_(root, info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/middleware.py", line 92, in resolve
CollectionUsers_server |     return next_(root, info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/schema/schema_converter.py", line 389, in _resolver
CollectionUsers_server |     return _get_result(_source, strawberry_info, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/schema/schema_converter.py", line 381, in _get_result
CollectionUsers_server |     return field.get_result(
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django/fields/field.py", line 99, in get_result
CollectionUsers_server |     return super().get_result(source, info, args, kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/field.py", line 279, in get_result
CollectionUsers_server |     return self.base_resolver(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/types/fields/resolver.py", line 39, in __call__
CollectionUsers_server |     return self.wrapped_func(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 79, in wrapper
CollectionUsers_server |     return func(ctx, *args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 92, in wrapper
CollectionUsers_server |     return dispose_extra_kwargs(f)(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry_django_jwt/decorators.py", line 324, in wrapper
CollectionUsers_server |     return fn(src, root, *args_, **passed_kwargs)
CollectionUsers_server | TypeError: permissions() got multiple values for argument 'info'
CollectionUsers_server | Stack (most recent call last):
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 890, in _bootstrap
CollectionUsers_server |     self._bootstrap_inner()
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
CollectionUsers_server |     self.run()
CollectionUsers_server |   File "/usr/lib/python3.8/threading.py", line 870, in run
CollectionUsers_server |     self._target(*self._args, **self._kwargs)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 650, in process_request_thread
CollectionUsers_server |     self.finish_request(request, client_address)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 360, in finish_request
CollectionUsers_server |     self.RequestHandlerClass(request, client_address, self)
CollectionUsers_server |   File "/usr/lib/python3.8/socketserver.py", line 720, in __init__
CollectionUsers_server |     self.handle()
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/servers/basehttp.py", line 176, in handle
CollectionUsers_server |     self.handle_one_request()
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/servers/basehttp.py", line 201, in handle_one_request
CollectionUsers_server |     handler.run(self.server.get_app())
CollectionUsers_server |   File "/usr/lib/python3.8/wsgiref/handlers.py", line 137, in run
CollectionUsers_server |     self.result = application(self.environ, self.start_response)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/contrib/staticfiles/handlers.py", line 76, in __call__
CollectionUsers_server |     return self.application(environ, start_response)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/wsgi.py", line 133, in __call__
CollectionUsers_server |     response = self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/base.py", line 130, in get_response
CollectionUsers_server |     response = self._middleware_chain(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/deprecation.py", line 117, in __call__
CollectionUsers_server |     response = response or self.get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
CollectionUsers_server |     response = get_response(request)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
CollectionUsers_server |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
CollectionUsers_server |     return self.dispatch(request, *args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
CollectionUsers_server |     return bound_method(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
CollectionUsers_server |     return view_func(*args, **kwargs)
CollectionUsers_server |   File "/root/.local/share/virtualenvs/server-MrgTHRtU/lib/python3.8/site-packages/strawberry/django/views.py", line 148, in dispatch
CollectionUsers_server |     result = self.schema.execute_sync(

Hi, thanks for the issue.
There seems to be an issue with applying the user_passes_test decorator; I'll try to fix it ASAP.

Possible regression @KundaPanda