使用JavaScript SDK发布到Facebook页面时的授权问题

时间:2014-05-09 18:10:36

标签: javascript facebook facebook-javascript-sdk

我想发布到用户是管理员的Facebook页面。这是我的代码

FB.init({appId: "***********", status: true, cookie: true, frictionlessRequests: true});

var page = null;

function postToPage(page, msg){
  FB.api('/'+page.id+'/feed', 'post', { message: msg, access_token: page.access_token },
     function(res) { console.log(res) }
  )
}



FB.login(function(response) {
  if (response.authResponse) {
    // user is logged in and granted some permissions.
    FB.api('/me/accounts', function(response) { 
        console.log(response); 
        page = response.data[0]; 
        postToPage(page, 'hello fb-page world');
    })
   } else {
        // User cancelled login or did not fully authorize.
   }
}, {scope:'read_stream,publish_stream,offline_access, manage_pages,status_update'});

它不起作用,当我看到控制台时,我有错误:

(#200) The user hasn't authorized the application to perform this action  

我是否遗漏了scope中的授权?

2 个答案:

答案 0 :(得分:2)

试试这个

<body>
<div id='fb-root'></div>
<script src='http://connect.facebook.net/en_US/all.js'></script>
<p>
    <a href="javascript:;" onclick='postToFeed(); return false;'>Post to Group</a>
</p>
<p id='msg'></p>

<script> 
  FB.init({appId: "Yourappid", status: true, cookie: true});

  function postToFeed() {

    // calling the API ...
      FB.api('/Pageid/feed', 'post', 
              { 
                  message     : "It's awesome ...",
                  link        : 'Link',
                  picture     : 'Imageurl',
                  name        : 'Featured of the Day',
                  to: 'Pageid',
                  from: 'Pageid',
                  description : 'Your description'
          }, 
          function(response) {

              if (!response || response.error) {
                  alert(JSON.stringify(response.error));
              } else {
                  alert('Post ID: ' + response.id);
              }
          });
  }

</script>
</body>

另一种方式 主要的挑战是获得永久访问令牌,让我们代表页面管理员行动,其余的非常类似于制作常规的墙贴。获取访问令牌需要向页面管理员询问manage_pages额外权限,然后检索其“帐户”信息,这些信息将包含具有管理员权限的每个页面的access_token字段。

FB.login(function() {
    FB.api('/me/accounts', 'get', {}, function(response) {
        console.log(response);
    });
}, {perms:'publish_stream,offline_access,manage_pages'});

在其他墙贴文件参数中传递刚检索到的访问令牌

//API init code is omitted
var wallPost = {
    access_token: "<ACCESS_TOKEN>",
    message: 'Hello, World!'
};

FB.api('/me/feed', 'post', wallPost, function(response) {
    if (!response || response.error) {
        alert('Error occurred');
    } else {
        alert('Success!');
    }
});

关键是获得正确的访问令牌。您可以在浏览器中尝试使用firebug并测试您在此处获取的访问令牌https://developers.facebook.com/tools/debug/

答案 1 :(得分:1)

即使用户授予您的应用程序访问其公开个人资料的权限,但这并不意味着授予了所有必需的权限。

请参阅https://developers.facebook.com/docs/reference/javascript/FB.login/v2.0#permissions了解如何验证已授予哪些权限。