2016-06-16 49 views
0

我正在嘗試爲我正在開發的應用程序實現Facebook登錄。如何使用Facebook Python SDK從訪問令牌獲取用戶的電子郵件

我得到一個訪問令牌是這樣的:

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <script> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '[Redacted]', 
     xfbml  : true, 
     version : 'v2.6' 
    }); 

    FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     window.location = "http://[my domain]/FBloginAuth?"+FB.getAuthResponse()["accessToken"] 
    } else { 
     window.location = encodeURI("https://www.facebook.com/dialog/oauth?scope=email&client_id=[redacted]&redirect_uri=http://[my domain]/FBloginAuth&response_type=token"); 
    } 
}); 

    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "http://connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
    </script> 

    <div id="status"></div> 

</body> 
</html> 

我的服務器,然後纔對從像這樣(Python 2裏的URL訪問令牌,因爲我必須支持谷歌的OAuth SDK這似乎並不以支持Python 3.):

graph = facebook.GraphAPI(access_token=environ["QUERY_STRING"]) # Apparently there is an extrea 
profile = graph.get_object('me') 
args = {'fields' : 'id,name,email', } 
profile = graph.get_object('me', **args) 
print(profile) 

我知道這不會解析URL中有變量的情況。這不是重點。現在我手動餵食這個標記。代碼嘔吐:

{u'id': u'[redacted]', u'name': u'[redacted]'} 

我的問題是爲什麼電子郵件沒有出現在響應中,因爲我在詢問令牌時設置了範圍。另外,我應該怎麼做才能收到電子郵件?

+0

請確保a)用戶已授予您的應用權限(請求'/ me/permissions'來確認,使用相同的訪問權限令牌),和b)他們的電子郵件地址通過Facebook驗證。 – CBroe

+0

好的,我試過了。該電子郵件已驗證(至少我已登錄)。嘗試請求/ me /權限給出: –

+0

{ 「error」:{ 「message」:「必須使用活動訪問令牌來查詢有關當前用戶的信息。」, 「type」:「OAuthException」, 「代碼」:2500年, 「fbtrace_id」: 「G5cUTqW1eBL」 }} –

回答

0

確保

一)用戶實際已經授予的權限,您的應用程序(要求/me/permissions確認,使用相同的訪問令牌),以及

b)在他們的電子郵件地址是經Facebook驗證。 (顯然不是用於註冊的電子郵件地址。)

相關問題