Объект типа 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)
Это должно сработать.