不了解何时需要user_token vs access_token

时间:2014-06-07 05:01:38

标签: facebook facebook-graph-api facebook-access-token facebook-group

我无法理解FB如何确定是否需要用户令牌或access_token。 无论如何我都没有使用Facebook进行身份验证,而且我真的不想这样做。

我正在尝试将我们的Facebook群组信息显示给我们的论坛。

根据Graph API,/ group-id / feed需要以下内容:

  • 需要具有user_groups权限的组成员的用户访问令牌。
  • 应用访问令牌可以读取它在应用中发布的帖子以及属于它的游戏组。

/ group-id / events仅需要:

  • 具有user_groups权限的组成员的用户访问令牌。

文字略有偏差,但我希望能够传达与用户访问令牌相同的想法"。

根据FB,代替用户访问令牌,可以组合应用程序的app-id和app-secret来模拟access_token。

为我的小组的Feed执行此操作时,效果很好。 在为事件执行此操作时,我收到错误消息:

  • 代码:102
  • 消息:"要求此资源需要用户访问令牌。"
  • 类型:OAuthException

为什么app-id | app-secret access_token无效?我真的不想担心任何FB身份验证;我只想在我们的网站上列出我们的活动。我做错了什么或错过了处理它的正确方法吗?

$(function () {
    var location = document.URL;
    var ShowGroup = false;
    var group_id = null;

    if (location.indexOf("chattanooga-lodge") != -1) {
        group_id = "";
        ShowGroup = true;
    }

    if (ShowGroup) {
        $("#FBfeedContainer").show();
        // Initialize Facebook JavaScript API
        window.fbAsyncInit = function () {
            FB.init({
                appId: 'app-id',
                xfbml: true,
                version: 'v2.0'
            });

            //FB News Posts
            FB.api(
                "/" + group_id + "/feed",
                { access_token: "app-id|app-secret" },
                function (response) {
                    debugger;
                    if (response && !response.error) {
                        $.each(response.data, function (index, data) {
                            if (index < 3) {
                                $("#FBfeed").append(data.id);
                            }
                        });
                    }
                }
            );

            //FB Events
            FB.api(
                "/" + group_id + "/events",
                { access_token: "app-id|app-secret" },
                function (response) {
                    debugger;
                    if (response && !response.error) {
                        $.each(response.data, function (index, data) {
                            if (index < 3) {
                                $("#FBfeed").append(data.id);
                            }
                        });
                    }
                }
            );
        };

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

2 个答案:

答案 0 :(得分:1)

如果不使用任何用户身份验证,您将无法获取群组的活动。正如您已经指出的那样,对于group-id / feed(需要用户访问令牌或app访问令牌)和group-id / events(需要用户访问令牌)端点提到的权限。由于您通过组合app id和app secret创建的App访问令牌,您可以获取Feed数据。

Facebok API中的每个数据点都受到权限的严格保护。其中一些是公开的,另一些是访问不同类型的访问令牌,具体取决于Facebook发现应该可以访问的内容。您可以在https://developers.facebook.com/docs/facebook-login/access-tokens

了解更多相关信息

为了在网页上展示您的论坛活动,您可能需要进行解决。您必须创建自己的访问令牌并对其进行硬编码。显然你不应该在Javascript中这样做,而是用户PHP API

答案 1 :(得分:0)

我认为不需要用户登录Facebook的最简单方法是

  1. 创建Facebook App
  2. 使用以下代码检索
  3. 的事件
  4. 修改AJAX以引用新的代码文件(例如facebookEvents.php)
  5. 以下代码进入您的服务器

    <?php
        # facebookEvents.php
    
        $FacebookID = '';
        $APP_ID='';
        $APP_SECRET='';
    
        header('Content-Type: application/json');
        print_r(file_get_contents("https://graph.facebook.com/$FacebookID/events?access_token=$APP_ID|$APP_SECRET"));
    ?>
    

    App Dashboard提供的App ID和App Secret Facebook App ID and App Secret