2016-06-16 5 views
0

Ich versuche Facebook Login für eine Anwendung zu implementieren, die ich entwickle.Wie bekomme ich die E-Mail eines Benutzers von einem Zugriffstoken mit dem Facebook Python SDK?

ich ein Zugriffstoken wie diese bin immer:

<!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> 

Mein Server dann fischt das Zugriffstoken aus der URL wie diese (Python 2, weil ich die Google OAuth SDK unterstützen müssen, die nicht scheint Python 3.) zu unterstützen:

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) 

ich weiß, dass dies nicht für die Fälle analysieren, wo es Variablen in der uRL sind. Das ist nicht der Punkt. Für den Moment füttere ich den Token von Hand. Der Code erbricht:

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

Meine Frage ist, warum die E-Mail nicht in der Antwort angezeigt wird, wie ich den Umfang gesetzt, wenn für das Token zu fragen. Was soll ich tun, um die E-Mail zu erhalten?

+0

Stellen Sie sicher, dass a) der Benutzer tatsächlich die Erlaubnis zu Ihrer App erteilt hat (Anfrage '/ me/Berechtigungen' zu bestätigen, mit dem gleichen Zugriff Token), und b) dass ihre E-Mail-Adresse mit Facebook verifiziert wurde. – CBroe

+0

Ok, das habe ich ausprobiert. Die E-Mail ist verifiziert (zumindest habe ich mich angemeldet). Der Versuch, die/me/Berechtigungen anzufordern, lautet: –

+0

{ "error": { "message": "Ein aktives Zugriffstoken muss verwendet werden, um Informationen über den aktuellen Benutzer abzufragen.", "type": "OAuthException", "Code": 2500, "fbtrace_id": "G5cUTqW1eBL" } } –

Antwort

0

Stellen Sie sicher, dass

a) der Benutzer tatsächlich die Erlaubnis zu Ihrer App (Anfrage /me/permissions, um zu bestätigen, erteilt hat, unter Verwendung des gleichen Zugriffstoken) und

b), dass ihre E-Mail-Adresse ist Verifiziert mit Facebook. (Offensichtlich nicht automatisch der Fall mit der E-Mail-Adresse verwendet, um zu registrieren.)