2017-08-18 6 views
1

のために、私はvk.comプロバイダのRauthを使用してのOAuth2認証を実装しようとしていると私は次の問題があります。私の知る限りは、ユーザーの電子メールを取得する方法はありません知っているように実装のOAuth2 vk.com

をvk.com apiコールを介してアドレス指定しますが、access_tokenを含む電子メールアドレスをjson形式で送信します。

問題:私はRauthの「セッション」オブジェクトから取得する方法がわかりませんが、access_tokenフィールドはありますが、電子メールアドレスを取得する方法はありません。ここで

はコードです:

def callback(self): 
    def decode_json(payload): 
     return json.loads(payload.decode('utf-8')) 
    if 'code' not in request.args: 
     return None, None, None 
    oauth_session = self.service.get_auth_session(
     data={'code': request.args['code'], 
       'grant_type': 'authorization_code', 
       'redirect_uri': self.get_callback_url()}, 
     decoder=decode_json 
    ) 
    me = oauth_session.get("some call to vk.api").json() 

はあなたの助けをありがとう!

+0

あなたは範囲内に '電子メールの権利がありますか? –

+0

はい、私はスコープ= '電子メール'を持っています.vkはブラウザから手動で試してもjsonのアクセストークンで電子メールを返しますが、Rauthのセッションオブジェクトからは取り出すことができません –

答えて

1

説明しましょう。実際には、Vkontakteによってアクセストークンが提供されている場合は、emailが返されます。

新しいリクエストをしたので、oauth_session.getを使用する必要はありませんが、アクセストークンを取得するとすでに完了しています。 oauth_session.emailでオブジェクトプロパティを取得してみてください。

P.S. get_raw_access_tokenを使用してメールを見つけることができます。

+0

ありがとうございます。私の質問には、oauth_sessionオブジェクトには 'email'というプロパティはありません。 'access_token'があります.Rauthはvkontakteレスポンスからそれを抽出しますが、メールではありません。 –

+0

Sounds strange。しかし、それはaccess_tokenで正確に返されます。わかった、うまくいくといいね。電子メールが生の返品であれば 'get_raw_access_token'をチェックします。これはあなた次第です。 –

+0

あなたは正しいIvan 'get_raw_access_token'が役に立ちます。電子メールアドレスを含むvkontakteによって送られた生のjsonを返す' .json'メソッドがあります。どうもありがとう! –

関連する問題