Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

613
Vistas
El objeto 'str' no tiene atributo 'decode' en djangorestframework_simplejwt

Estaba tratando de seguir este inicio rápido desde la documentación de djangorestframework-simplejwt con el enlace https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html

Pero tengo un problema cuando trato de obtener el token y siempre devuelvo este error 'str' object has no attribute 'decode'

ingrese la descripción de la imagen aquí

Editado: este es mi código en urls.py

 from django.contrib import admin from django.urls import path from rest_framework_simplejwt import views as jwt_views from core.views import HelloView urlpatterns = [ path('admin/', admin.site.urls), path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'), path('hello/', HelloView.as_view(), name='hello'), ]

configuración.py

 ... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', ] ... REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], } ...

vistas.py

 from django.shortcuts import render # Create your views here. from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated class HelloView(APIView): permission_classes = (IsAuthenticated,) def get(self, request): content = {'message': 'Hello, World!'} return Response(content)
over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

La degradación de PyJWT hizo el trabajo por mí.

Para lograrlo, cambie la línea correspondiente en su requirements.txt a

 PyJWT==v1.7.1

o instale el paquete especificado con:

 pip install pyjwt==v1.7.1
over 4 years ago · Santiago Trujillo Denunciar

0

Tenía PyJWT-2.3.0 instalado y ni siquiera estaba adivinando si este problema podría estar relacionado con la versión.

Las respuestas anteriores me ayudaron a descifrar esto. Así que solo estoy escribiendo lo mismo con algunos detalles de registro adicionales.

pip install PyJWT==1.7.1

 (venv) ip-192-168-1-36:django_proj rishi$ pip install PyJWT==1.7.1 Collecting PyJWT==1.7.1 Using cached PyJWT-1.7.1-py2.py3-none-any.whl (18 kB) Installing collected packages: PyJWT Attempting uninstall: PyJWT Found existing installation: PyJWT 2.3.0 Uninstalling PyJWT-2.3.0: Successfully uninstalled PyJWT-2.3.0 Successfully installed PyJWT-1.7.1

Finalmente mi problema se resolvió. Gracias a las respuestas anteriores para ayudarme en esto.

over 4 years ago · Santiago Trujillo Denunciar

0

Eliminar .decode('utf-8') en "/venv/lib/python3.9/site-packages/rest_framework_jwt/utils.py" como

 # /venv/lib/python3.9/site-packages/rest_framework_jwt/utils.py def jwt_encode_handler(payload): key = api_settings.JWT_PRIVATE_KEY or jwt_get_secret_key(payload) return jwt.encode( payload, key, api_settings.JWT_ALGORITHM )#.decode('utf-8') ==> delete this

jwt2.3.0-utils-encode_handler

Cuando instaló simple-jwt, jwt se actualizó a la versión 2.3.0 desde 1.7.1 (tal vez). y por esto,

jwt2.3.0-api_jwt-encode

"-> str:" se ha agregado al método "encode", y esto significa que "encode" devuelve "str".

por lo que ya no necesitamos .decode('utf-8') en utils.py en rest_framework_jwt.

y si ejecuta el servidor nuevamente, puede encontrar el problema a continuación.

excepto jwt.ExpiredSignature: rest_framework.request.WrappedAttributeError: el módulo 'jwt' no tiene el atributo 'ExpiredSignature'

puedes arreglar esto de la siguiente manera,

 # /venv/lib/python3.9/site-packages/rest_framework_jwt/authentication.py try: payload = jwt_decode_handler(jwt_value) except jwt.ExpiredSignatureError: # ExpiredSignature => no more exists msg = _('Signature has expired.') raise exceptions.AuthenticationFailed(msg) except jwt.DecodeError: msg = _('Error decoding signature.') raise exceptions.AuthenticationFailed(msg)

jwt2.3.0-autenticación-excepto

este problema ocurrió porque la versión jwt se actualizó a 2.3.0 y ExpiredSignature ya no existe.

Pero le recomendamos que baje la versión de jwt a 1.7.1 ya que no conocemos todos los cambios realizados por la actualización.

jwt2.3.0-init.py

jwt1.7.1-init.py

over 4 years ago · Santiago Trujillo Denunciar

0

para mí, deje degradar jwt a la versión 1.7.1

para hacer eso, actualice la línea correspondiente require.txt o, si no es la línea PyJWT, agregue esta línea

 PyJWT==v1.7.1
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda