2016-05-25 12 views
0

、これはGoogleのオブジェクトがどのように見えるかです:- 私はグーグルでログインしOAuthlibを使用してWebアプリケーションをやろうとしているフラスコ

google = oauth.remote_app('google', 
    request_token_url=None, 
    access_token_method='POST', 
    request_token_params={'scope': 'email'}, 
    access_token_url='https://accounts.google.com/o/oauth2/token', 
    authorize_url='https://accounts.google.com/o/oauth2/auth', 
    consumer_key="my consumer", 
    consumer_secret="my secret", 
    base_url='https://www.googleapis.com/oauth2/v1/' 
) 

私はHVE問題だから、

@app.route('/login/authorized/<provider>') 
def authorized(): 
    resp = google.authorized_response() 
    auth_error(resp) 
    id_token = json.load(resp['id_token']) 
    login_user(me, True) 
    return redirect(url_for('index')) 

、私はjson.loadでやろうが、この特定のケースでは、Googleが私に与えた情報をデコードすることで、私はGoogleからのユーザー情報を取得する場合で、彼は私の承認図であり、レスポンスにはid_tokenという長い文字列があり、私の研究によれば、jsonでエンコードされた文字列であるwhそれは、デコードされたすべてのユーザー情報を提供し、関係なく、私はそれをデコードするための正しい方法を見つけることができないようしてみてくださいどのくらい、私が手にエラーがありませんエン:json.loadラインで

AttributeError: 'unicode' object has no attribute 'read' 

EDIT:id_tokenをデコードした後、それを使って自分のデータベースでユーザーを取得または作成します。

私はFlaskを使用しています。ライブラリはjsonです。

誰かがPythonオブジェクトに文字列をデコードする正しい方法を説明できるなら、私はそれを多く、またはこれがjsonではないがコード化された文字列のいくつかの他の型を教えてくださいありがとうと思います。事前にどうもありがとうございました。

答えて

3

json.loadreads from a file。 JSON 文字列をデコードするには、json.loadsを使用します。

しかし、these docsによると、id_tokenはJSONではなく、"JSON Web Token"です。

あなたは「ペイロード」を探しているなら、あなたは試してみてください:

payload = json.loads(resp['id_token'].split('.')[1].decode('base64')) 
+0

の詳細については

私はとValueErrorを得るjson.loadsを使用する場合:いいえJSONオブジェクトは、多分私はGoogleが返しているものを非常によく説明していないよ、デコードすることができ、私はそれをここに投稿するだろうが、それはあります –

+0

@JenaroCalviñoトークンが[base64](https://en.wikipedia.org/wiki/Base64)エンコーディングのように見える場合、私の答えに従って、最初にそれを解読してみてください。 –

+0

@JenaroCalviñoあなたは 'id_token'がJSON文字列であることを示唆する研究を提供できますか? –

0

この-ヴィダーは私のid_tokenがJWTないJSONだった、と私はライブラリを使用して最終的にそれを解読することができたと述べた@としてjwt.decode(resp ['id_token']、verify = False)を使っていました。誰もが同じ問題を抱えていて、解決策が必要だった場合に備えて、これを投稿するだけです。どうもありがとうございました。 JWT

関連する問題