Объект типа bytes не является JSON-сериализуемым при попытке вернуть jwt_token

Действительно запутался, потому что эта функциональность работала несколько дней назад, и я не вносил существенных изменений в свой код.

Я получаю следующее сообщение:

Traceback (most recent call last):
  File "C:\Users\15512\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\15512\anaconda3\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
  File "C:\Users\15512\anaconda3\lib\site-packages\django\core\serializers\json.py", line 105, in default
    return super().default(o)
  File "C:\Users\15512\anaconda3\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable

Подводя итог, я отправляю имя в библиотеку Twilio с расчетом на получение JWT-токена. Конечная точка API затем возвращает дикту с ключом: название и jwt_token

Вот как выглядит мой вид для конечной точки:

class TokenView(View):
    def get(self, request, username, *args, **kwargs):
        voice_grant = grants.VoiceGrant(
            outgoing_application_sid=settings.TWIML_APPLICATION_SID,
            incoming_allow=True,
        )
        access_token = AccessToken(
            settings.TWILIO_ACCOUNT_SID,
            settings.TWILIO_API_KEY,
            settings.TWILIO_API_SECRET,
            identity=username
        )
        access_token.add_grant(voice_grant)
        jwt_token = access_token.to_jwt()
        full_data = {'token': jwt_token}
        # print(type(jwt_token))
        return JsonResponse(json.dumps(full_data), content_type="application/json", safe=False)

Я также пытался сделать это в операторе возврата:

JsonResponse({"token": jwt_token})

access_token.to_jwt() возвращает byte, просто расшифруйте маркер: access_token.to_jwt().decode()

Полный код:

class TokenView(View):
    def get(self, request, username, *args, **kwargs):
        voice_grant = grants.VoiceGrant(
            outgoing_application_sid=settings.TWIML_APPLICATION_SID,
            incoming_allow=True,
        )
        access_token = AccessToken(
            settings.TWILIO_ACCOUNT_SID,
            settings.TWILIO_API_KEY,
            settings.TWILIO_API_SECRET,
            identity=username
        )
        access_token.add_grant(voice_grant)
        jwt_token = access_token.to_jwt()
        full_data = {'token': jwt_token.decode()}
        # print(type(jwt_token))
        return JsonResponse(json.dumps(full_data), content_type="application/json", safe=False)

Это должно сработать.

Вернуться на верх