首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图返回jwt_token时,类型为字节的对象不能JSON序列化

当试图返回jwt_token时,类型为字节的对象不能JSON序列化
EN

Stack Overflow用户
提问于 2022-06-10 18:22:51
回答 1查看 734关注 0票数 0

真的很困惑,因为几天前这个功能还在工作,我没有对我的代码做任何实质性的修改。

我得到了这个回溯:

代码语言:javascript
复制
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_token。然后,API端点将返回带有键: title和jwt_token的dict。

这就是我对终点的看法:

代码语言:javascript
复制
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)

我还试图在返回语句中这样做:

代码语言:javascript
复制
JsonResponse({"token": jwt_token})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-10 18:54:35

access_token.to_jwt()返回一个byte,只需解码令牌:access_token.to_jwt().decode()

完整代码:

代码语言:javascript
复制
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)

那应该管用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72578461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档