此调用需要页面访问令牌

时间:2018-09-10 12:48:47

标签: facebook-graph-api facebook-javascript-sdk

我正在尝试登录Facebook,此操作已完成。我需要获取用户信息,例如姓名,电子邮件,家乡,位置,性别,profile_pic。但是我只能获取已登录用户的用户名。我还向api添加了fields参数。您可以在下面的代码中看到它。

<div id="container"></div>
<script>
 var accessToken;
 window.fbAsyncInit = function() {
   FB.init({
    appId      : 'App Id',
    cookie     : true,
    xfbml      : true,
    version    : 'v3.1'
   });

   FB.AppEvents.logPageView();   

   function getuserProfile() {
    FB.api('/me?fields=id,name,email,birthday,gender,hometown,location,profile_pic', {access_token : accessToken }, function (response){
      console.log(response);
    });
 }  

FB.login(function(response) {
  if (response.status === 'connected') {
    accessToken = response.authResponse.accessToken;
    getuserProfile();
  } else {
    console.log('not connected');
  }
}, {scope: 'email'});  
};

(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 = "https://connect.facebook.net/en_US/sdk.js";
  fjs.parentNode.insertBefore(js, fjs);
 }(document, 'script', 'facebook-jssdk'));

2 个答案:

答案 0 :(得分:0)

确保在登录弹出窗口中要求您提供电子邮件权限。另外,您需要使用scope参数(而不只是电子邮件)要求其他权限。例如,使用user_birthday获取用户生日。现在,您只要求获得电子邮件许可。

示例:

FB.login(function(response) {
  if (response.status === 'connected') {
    accessToken = response.authResponse.accessToken;
    getuserProfile();
  } else {
    console.log('not connected');
  }
}, {scope: 'email,user_birthday,...'});  
};

权限参考:https://developers.facebook.com/docs/facebook-login/permissions/

答案 1 :(得分:0)

某些字段可能被指定为错误,这就是Facebook API给出此类错误的原因,即使其他一切似乎都很好。例如,profile_pic字段可能会导致此类错误,该错误应该类似于picture.type(large)。另请参阅:FacebookGraphAPIError: (#210) This call requires a Page access token