Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”

Dip*_*eja 6 django graphql graphene-django django-graphql-jwt

目前我正在从文档页面运行 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)
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行tokenAuth突变,它会在GraphiQL界面中抛出以下错误。请注意,如果我输入不正确的凭据,它会抛出一个“ Please enter valid credentials”而不是下面的。

{
  "errors": [
    {
      "message": "'str' object has no attribute 'decode'",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "tokenAuth"
      ]
    }
  ],
  "data": {
    "tokenAuth": null
  }
}
Run Code Online (Sandbox Code Playgroud)

Dip*_*eja 14

我在 github 上发现这是一个未解决的问题,django-graphql-jwt并且能够通过1.7.0使用PyJWT. 当前安装的是版本2.0

https://github.com/flavors/django-graphql-jwt/issues/241


Ben*_*ari 5

我正在使用django-graphql-jwt==0.2.1没有这个问题。显然,该问题与目前django-graphql-jwt的新版本有关。0.3.0或者,正如您所提到的,您可以将 绑定PyJWT1.7.0.

解决方案是在requirements.txt文件中使用这些有界包,如下所示:

django-graphql-jwt==0.3.0
PyJWT==1.7.0
Run Code Online (Sandbox Code Playgroud)

或者

django-graphql-jwt==0.2.1
Run Code Online (Sandbox Code Playgroud)