如何使用Facebook Python SDK从访问令牌获取用户的电子邮件

时间:2016-06-16 13:09:52

标签: python facebook email facebook-graph-api

我正在尝试为我正在开发的应用程序实施Facebook登录。

我正在获取这样的访问令牌:

dateTime = NSDate(dateWithTimeIntervalSinceReferenceDate:Double(activityInfo["eventDateTime‌​"] as! String))

我的服务器然后从这样的URL中捕获访问令牌(Python 2,因为我必须支持似乎不支持Python 3的Google OAuth 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>

我知道这并没有解析url中存在变量的情况。这不是重点。现在我正在手动喂食令牌。代码呕吐:

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)

我的问题是,当我在请求令牌时设置范围时,电子邮件没有出现在响应中。另外,我该怎么做才能收到电子邮件?

1 个答案:

答案 0 :(得分:0)

确保

a)用户实际上已向您的应用授予了权限(请求/me/permissions使用相同的访问令牌进行确认)和

b)他们的电子邮件地址已通过Facebook验证。 (显然不会自动使用用于注册的电子邮件地址。)