Estoy siguiendo el tutorial de graphql python en https://www.howtographql.com/graphql-python/4-authentication/ . Funcionó bien para las primeras 3 secciones, pero en la sección de Autenticación me encontré con este problema.
Estoy aprendiendo python, no sé Django o graphql, por lo que es mucho para digerir todo de una vez, pero iba bien hasta ahora. Tampoco estoy seguro de qué bits relevantes incluir aquí.
Seguí todas las instrucciones. Cuando voy al sitio de mi proyecto local en localhost:8000/graphql/ , obtengo
TypeError at /graphql/
__init__() missing 1 required positional argument: 'get_response'
Aquí está el fragmento relevante de mi settings.py:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ] GRAPHENE = { 'SCHEMA': 'hackernews.schema.schema', 'MIDDLEWARE': ['graphql_jwt.middleware.JSONWebTokenMiddleware', ], } AUTHENTICATION_BACKENDS = [ 'graphql_jwt.backends.JSONWebTokenBackend', 'django.contrib.auth.backends.ModelBackend', ]También importé graphql_jwt en mi esquema principal.py
Aquí hay algún tipo de seguimiento de pila
Environment: Request Method: GET Request URL: http://localhost:8000/graphql/ Django Version: 2.1.4 Python Version: 3.7.4 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'graphene_django', 'links'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware'] Traceback: File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view 54. return view_func(*args, **kwargs) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\views\generic\base.py" in view 62. self = cls(**initkwargs) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\graphene_django\views.py" in __init__ 88. self.middleware = list(instantiate_middleware(middleware)) File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\graphene_django\views.py" in instantiate_middleware 48. yield middleware() Exception Type: TypeError at /graphql/ Exception Value: __init__() missing 1 required positional argument: 'get_response'Vale, lo acabo de encontrar.
GRAPHENE = { 'SCHEMA': 'hackernews.schema.schema', 'MIDDLEWARES': ['graphql_jwt.middleware.JSONWebTokenMiddleware'], } Fíjate en la S Tiene que ser 'MIDDLEWARES' , no 'MIDDLEWARE' .
Encontré la solución en este problema de GitHub
Además, de acuerdo con este comentario sobre el mismo problema, debe agregar 'graphql_jwt.middleware.JSONWebTokenMiddleware' a la lista MIDDLEWARE (la que tiene todo el middleware de Django).
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'graphql_jwt.middleware.JSONWebTokenMiddleware', ### <---Add this line 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]actualice django-graphql-jwt a 0.3.4 (o superior) desde el tutorial 0.1.5