Веб-токен JSON больше не имеет атрибута ‘decode’, несмотря на отсутствие изменений

#python #django #jwt #twilio #twilio-api

#python #django #jwt #twilio #twilio-api

Вопрос:

У меня есть функция, которая предоставляет пользователю токен, чтобы он мог получить доступ к комнате видеочата с помощью Twilio Video API. Следуя их документам, мы декодируем веб-токен JSON следующим кодом, чтобы предоставить нам их токен:

 token = AccessToken(ACCOUNT_SID, API_KEY, API_SECRET, identity=f'{request.user.email}')
token.add_grant(VideoGrant(room='My Room'))
context = {
    'token': token.to_jwt().decode()
}
 

Это отлично работало локально, и после отправки его на действующие серверы продолжал работать там без сбоев. Однако несколько нажатий спустя, без изменений в этом коде, и эта ошибка (ниже) внезапно произошла. Это также происходит одновременно с другой ошибкой, которая является ошибкой кодировки ascii, которая, я полагаю, может быть связана.

Странно, что, хотя в этот объект токена или функцию не было внесено никаких изменений, мы внезапно сталкиваемся с этой ошибкой при декодировании этого токена. Если у кого-нибудь есть какие-либо указатели, буду признателен.

Скриншот от пользователя

Ответ №1:

PyJWT изменил возвращаемый тип jwt.encode from bytes на str : https://pyjwt.readthedocs.io/en/stable/changelog.html#jwt-encode-return-type

Решение состоит в том, чтобы либо понизить / закрепить PyJWT пакет 1.7.1 , либо удалить вызов decode

 context = {
    'token': token.to_jwt()
}
 

Комментарии:

1. Это было исправлено для производства, спасибо! Как ни странно, производство не жаловалось на установку PyJWT 2.0 , несмотря на требование Twilio 1.7.1 . Серверы разработчиков не разрешили установку несовместимости, отсюда и ошибка с одной стороны