web-dev-qa-db-ja.com

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

エラーメッセージは、エンコードがjwtで見つからないことを示しています。 jwtでタブを実行したところ、エンコードはjwt.JWT内のメソッドであることがわかりました。に変えてみた

jwt_string = jwt.JWT.encode(payload, shared_key)

そして、それはこのエラーを与えます:

非バインドメソッドencode()は、最初の引数としてJWTインスタンスで呼び出す必要があります(代わりにdictインスタンスを取得します)

私はそれを間違っていますか?ここに私のpython環境のバージョン情報があります:

2.7.10 | Anaconda 2.3.0(64ビット)| (デフォルト、2015年5月28日、16:44:52)[MSC v.1500 64ビット(AMD64)]

40

JWTとPyJWTの両方がインストールされている場合に問題が発生します。 import jwt PyJWTとは対照的にライブラリJWTをインポートしています-後者はエンコードに必要なものです。やった pip uninstall JWTおよびpip uninstall PyJWTその後、最後にpip install PyJWT。その後、正しいモジュールをインポートしてトークンを生成しました! :)

78
Joshua

PyJWTパッケージ を使用できます。ここで、jwt.encode()は正常に機能します(初期化などの必要はありません)。

8
poxip

Jwt.encode()を呼び出していたスクリプトを「jwt.py」と名付けたため、私も同じ問題に直面していました。そのため、スクリプトの命名には注意してください。ライブラリ名は使用しないでください。

3
Aarya

代わりに PyJWT を使用してください。 jwt で同じ問題に直面したため、アンインストールして、代わりにPyJWTを使用しました。

2
Sameh Sharaf

いくつかの回避策を試した後、同じコードで新しいpythonノートブックを作成しましたが、動作しているようです。以前は何が問題だったのかわかりません。試みた。

0