JWT:“模块”对象没有属性“编码”

Arv*_*amy 42 python jwt

我得到一个模块未找到错误使用时jwt。这是我的声明方式:

def create_jwt_token():
    payload = {
        "iat": int(time.time())
    }

    shared_key = REST_API_TOKEN
    payload['email'] = EMAIL
    payload['password'] = PASSWORD

    jwt_string = jwt.encode(payload, shared_key)
    encoded_jwt = urllib.quote_plus(jwt_string)  # URL encode the JWT string

    return encoded_jwt
Run Code Online (Sandbox Code Playgroud)

错误消息说在中找不到编码jwt。我做了一个标签jwt,发现编码是里面的一个方法jwt.JWT。我尝试将其更改为

jwt_string = jwt.JWT.encode(payload, shared_key)
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

必须以JWT实例作为第一个参数来调用未绑定方法encode()(改为使用dict实例)

我做错了什么?这是我的Python环境的版本信息:

2.7.10 | Anaconda 2.3.0(64位)| (默认值,2015年5月28日,16:44:52)[MSC v.1500 64位(AMD64)]

Jos*_*hua 81

如果同时安装了JWT和PyJWT,则会出现问题。执行import jwt此操作时,将导入库JWT而不是PyJWT-后者是您要编码的库。我做了pip uninstall JWTpip uninstall PyJWT然后终于pip install PyJWT。之后,它导入了正确的模块并生成了令牌!:)

  • 是的,就是这样。有一个错误地安装了名为“ jwt”的软件包,该软件包与“ PyJWT”的JWT模块搞砸了。 (4认同)
  • 确保 Flask-jwt 模块也已卸载。pip install PyJWT=1.6.4 的另一件事使它非常适合我。`pip 安装 PyJWT=1.6.4` (3认同)

Aar*_*rya 19

我也面临着同样的问题,因为我将调用 jwt.encode() 的脚本命名为“jwt.py”。所以命名脚本时要小心。尽量不要使用任何库名称。

  • 非常重要并解决了我的问题 (4认同)
  • 就是这样!!!谢谢!!!不要将本地文件命名为库文件! (2认同)

cod*_*ina 15

就我而言,我只需要做

pip install pyjwt
Run Code Online (Sandbox Code Playgroud)


Nil*_*ngh 13

我解决了这个问题,@josua 的回答是正确的,我想详细回答。就我而言,pyJwt 已经安装。我正在使用getream 客户端

然后我尝试使用以下方法安装 jwt:jwt package

这是一个与 JWT 相关的已知问题

所以实际问题是吉田的一句话:

抱歉不行。截至目前,两个库都使用相同的 jwt 模块命名空间,并且 Python 的模块系统无法确定性地解析 import jwt。

所以我检查了我的 pip freeze 并安装了 jwt 并使用以下命令解决了这个问题:

pip uninstall jwt==1.0.0
pip uninstall PyJWT
pip install PyJWT
Run Code Online (Sandbox Code Playgroud)

现在我的代码:

encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
Run Code Online (Sandbox Code Playgroud)

工作正常。


pox*_*xip 8

您可以使用PyJWT软件包,在该软件包jwt.encode()效果很好(无需初始化或其他种类的东西)。


Sam*_*raf 7

请改用PyJWT。我在jwt 上遇到了同样的问题,所以我卸载了它并改用了 PyJWT。


Arv*_*amy 0

在尝试了几种解决方法之后,我使用相同的代码创建了一个新的 Python 笔记本,并且它似乎可以正常工作。我不确定之前是什么问题。