我得到一个模块未找到错误使用时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 JWT,pip uninstall PyJWT然后终于pip install PyJWT。之后,它导入了正确的模块并生成了令牌!:)
Aar*_*rya 19
我也面临着同样的问题,因为我将调用 jwt.encode() 的脚本命名为“jwt.py”。所以命名脚本时要小心。尽量不要使用任何库名称。
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)
工作正常。