Не понимаю, когда требуется user_token по сравнению с access_token

У меня возникли проблемы с пониманием того, как FB определяет, требуется ли токен пользователя или access_token. Я никоим образом не использую Facebook для аутентификации, да и не хотел этого.

Я пытаюсь отобразить информацию из нашей группы Facebook на нашем форуме.

Согласно Graph API, /group-id/feed требует:

  • Требуется токен доступа пользователя для члена группы с разрешением user_groups.
  • Маркер доступа к приложению может читать сообщения, опубликованные им в принадлежащих ему группах приложений и игр.

/group-id/events требует только:

  • Маркер доступа пользователя для члена группы с разрешением user_groups.

Текст немного отличается, но, похоже, я передаю ту же мысль о «токенах доступа пользователя».

Согласно FB, вместо токена доступа пользователя можно комбинировать идентификатор приложения и секрет приложения для имитации access_token.

Когда я делаю это для фида моей группы, это прекрасно работает. Когда я делаю это для событий, я получаю сообщение об ошибке:

  • Код: 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'));
    }
});

person Robert Burke    schedule 07.06.2014    source источник
comment
Объединение app-id и app-secret создаст токен доступа к приложению. Не токен доступа пользователя. Вот почему в документации говорится, что токен доступа пользователя и токен доступа к приложению.   -  person WizKid    schedule 07.06.2014
comment
И если вы заметили, что я вставил из документации по API, то и фид, и события говорят, что им требуется токен пользователя. Как я уже говорил, в документации API сказано, что вы можете использовать токен доступа к приложению вместо токена доступа пользователя. Кроме того, как я уже говорил, в одном случае токен приложения работает, а в другом — нет. вздох Вы читали что-нибудь из того, что я написал? Мне интересно, почему есть несоответствия или я что-то упускаю.   -  person Robert Burke    schedule 07.06.2014
comment
Где сказано, что вы можете использовать токен доступа к приложению вместо токена доступа пользователя? Это неправильно. Для /{group-id}/events в документации, которую вы скопировали, говорится, что это должен быть токен доступа пользователя. И для /{group-id}/feed в документации, которую вы скопировали, говорится, что токен доступа к приложению может просто получить доступ к группам приложений и игр. Чтобы получить доступ к другим группам, вы должны использовать токен доступа пользователя, который является членом этой группы и предоставил вам разрешение user_group. И сообщение об ошибке, которое вы получили, говорит, что вы должны использовать токен доступа пользователя   -  person WizKid    schedule 07.06.2014
comment
Приложение может получить доступ к игровым группам, к которым оно принадлежит. Но я создал приложение, мой друг создал группу, и они никак не связаны друг с другом. (Если только он не считает меня владельцем приложения, и поскольку я являюсь частью группы, следовательно, действительный токен доступа?   -  person Robert Burke    schedule 07.06.2014
comment
Звучит как ошибка, если токен доступа к приложению работает   -  person WizKid    schedule 07.06.2014
comment
Возможно, тогда это это ошибка в фиде. и Events - тот, который действует правильно. Я вернулся и посмотрел, что я читал о токенах приложений и токенах пользователей ... Я совершенно неправильно это понял ... лол. Но даже в этом случае это заставило меня сделать то, что я сделал, и это сработало. Странные вещи иногда случаются, я думаю. Это первый раз, когда я пытаюсь что-то сделать с FB API, так что я полный нуб. Спасибо за помощь. Я должен согласиться, это должно быть ошибка, или каким-то образом API получает ссылку, потому что я являюсь владельцем приложения и я являюсь членом группы, и поэтому это является действительным токеном для фида. .   -  person Robert Burke    schedule 07.06.2014


Ответы (2)


Вы не сможете получать события группы без аутентификации пользователя. Как вы уже указывали о разрешениях, упомянутых для конечных точек идентификатора группы/канала (требуется либо токен доступа пользователя, либо токен доступа приложения) и идентификатора группы/событий (требуется токен доступа пользователя). Вы можете получать данные канала благодаря маркеру доступа к приложению, который вы создали, объединив идентификатор приложения и секрет приложения.

Каждая точка данных в Facebok API строго охраняется разрешениями. Некоторые из них являются общедоступными, доступ к другим осуществляется с помощью различных типов токенов доступа в зависимости от того, что находит Facebook, кому должно быть доступно. Подробнее об этом можно прочитать здесь https://developers.facebook.com/docs/facebook-login/access-tokens

Чтобы отображать события вашей группы на веб-странице, вам, возможно, придется сделать обходной путь. Вам нужно будет создать свой собственный токен доступа и жестко закодировать его. Очевидно, вы не должны делать это в Javascript, а в пользовательском PHP API

person nitigyan    schedule 07.06.2014
comment
Чтобы добавить к этому... вам в настоящее время требуется read_stream как разрешение для получения большинства сообщений из группы. Вы можете получить токен доступа из графического инструмента API, чтобы увидеть эту работу. К сожалению, токен доступа работает только в течение 2 часов или 60 дней, если вы продлеваете его в приложениях веб-сайта. developers.facebook.com /tools/explorer/145634995501895/ - person SlickRemix; 02.10.2014

Я думаю, что самый простой способ, который не требует от пользователей входа в Facebook, — это

  1. Создайте приложение Facebook
  2. Используйте следующий код для получения событий
  3. Измените AJAX, чтобы он ссылался на новый файл кода (например, facebookEvents.php)

Код ниже, чтобы перейти на ваш сервер

<?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"));
?>

Идентификатор приложения и секрет приложения доступны на панели приложений Идентификатор приложения Facebook и секрет приложения

person thewheat    schedule 07.06.2014