Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”
Posted
技术标签:
【中文标题】Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”【英文标题】:Django GraphQL JWT: tokenAuth mutation returns "str object has no attribute decode" 【发布时间】:2021-04-18 14:08:45 【问题描述】:目前我正在从文档页面运行 django-graphqljwt 的基本示例。 https://django-graphql-jwt.domake.io/en/latest/quickstart.html
import graphene
import graphql_jwt
class Mutation(graphene.ObjectType):
token_auth = graphql_jwt.ObtainJSONWebToken.Field()
verify_token = graphql_jwt.Verify.Field()
refresh_token = graphql_jwt.Refresh.Field()
schema = graphene.Schema(mutation=Mutation)
但是,如果我运行 tokenAuth
突变,它会在 GraphiQL
界面中引发以下错误。 注意,如果我输入了错误的凭据,它会抛出“Please enter valid credentials
”而不是下面的。
"errors": [
"message": "'str' object has no attribute 'decode'",
"locations": [
"line": 2,
"column": 3
],
"path": [
"tokenAuth"
]
],
"data":
"tokenAuth": null
【问题讨论】:
【参考方案1】:我在 github 上发现这是 django-graphql-jwt
软件包的一个未解决问题,并且能够通过使用 1.7.0
版本的 PyJWT
来解决它。当前安装的是版本2.0
https://github.com/flavors/django-graphql-jwt/issues/241
【讨论】:
【参考方案2】:我使用django-graphql-jwt==0.2.1
没有这个问题。显然,问题与django-graphql-jwt
的新版本有关,现在是0.3.0
。或者,正如您所提到的,您可以将PyJWT
绑定到1.7.0
。
解决方案是在您的requirements.txt
文件中使用这些有界包,如下所示:
django-graphql-jwt==0.3.0
PyJWT==1.7.0
或者
django-graphql-jwt==0.2.1
【讨论】:
【参考方案3】:我遇到了类似的问题,这显然是因为PyJWT==2.3.0
与django-graphql-jwt
不兼容,正如Dipanshu 在他的回答中提到的那样,它在将PyJWT==2.3.0
降级为PyJWT==1.7.0
后工作。
使用下面的 pip 命令检查你的虚拟环境中的 PyJWT 包的版本是否大于 2.0.0
pip show PyJWT
如果大于 2.0.0,使用下面的 pip 命令在你的虚拟环境中降级包
pip install --upgrade PyJWT==1.7.0
【讨论】:
以上是关于Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”的主要内容,如果未能解决你的问题,请参考以下文章
django-graphql-jwt JWT_COOKIE_SAMESITE 不工作
GraphQL - JWT - 更改 verifyToken 突变的有效负载 - django
DJANGO-GRAPHQL-JWT:我们如何知道刷新令牌发布后的年龄?
JWT 身份验证:使用 UI 令牌对 Graphene/Django (GraphQL) 查询进行身份验证?