Facebook неверный токен доступа? - PullRequest
13 голосов
/ 24 апреля 2010

Я пытаюсь использовать недавно выпущенный API Graph Graph Facebook, но не могу заставить его работать правильно.

Я прошел все этапы, и после вызова / authorize я получил access_token:

access_token=109002049121898|nhKwSTJVPbUZ5JYyIH3opCBQMf8.

Когда я пытаюсь использовать этот токен, я получаю:

{
   "error": {
      "type": "QueryParseException",
      "message": "An active access token must be used to query information about the current user."
   }
}

Я тоже в тупике, почему ...

-AC

Ответы [ 9 ]

12 голосов
/ 15 июля 2011

При использовании токена приложения Facebook

Если вы используете псевдоним me, как в https://graph.facebook.com/me/, но ваш токен приобретен для приложения Facebook , то «я» больше не вы - это приложение или, может быть, ничего , В любом случае, вы не намерены взаимодействовать с самим приложением.

В этом случае вы захотите взаимодействовать с вашей личной учетной записью пользователя из приложения. Что вам нужно сделать (после предоставления приложению разрешений, которые оно запрашивает в пользовательском интерфейсе при запросе), найти свой идентификатор пользователя в Facebook и поставить его вместо «я», чтобы получить доступ к вашей собственной информации. например Имя пользователя в Facebook Марка Цукерберга равно 4, поэтому он https://graph.facebook.com/4/

Псевдоним me работает только если вы! Иногда трудно вспомнить, кто является текущим пользователем при программировании Facebook (то есть вы, страница, приложение и т. Д.), Потому что мы привыкли использовать пользовательский интерфейс facebook большую часть времени сами. С точки зрения программирования это зависит от того, что представляет полученный токен.

Отличный пост в блоге, который всегда помогает мне исправить это Бен Биддингтон | Facebook Graph API - получение токенов доступа .

7 голосов
/ 25 апреля 2010

то же самое здесь. Я последовал за блогом Бена Биддингтона , чтобы получить токен доступа. Та же ошибка при попытке его использовать. Реализация OAuth в Facebook не полностью соответствует спецификации, с ней все в порядке, пока документ ясен, что, очевидно, здесь не так. Также было бы неплохо, если бы идентификатор пользователя и имя пользователя возвращались с токеном доступа.

4 голосов
/ 24 апреля 2010

Просто уточнить - после звонка

https://graph.facebook.com/oauth/authorize?

вы должны получить КОД, который вместе с вашими CLIENT_ID и CLIENT_SECRET (при условии, что вы зарегистрировали свою заявку) можно обменять на access_token по

https://graph.facebook.com/oauth/access_token?

Если это действительно то, как вы пришли к ACCESS_TOKEN, то вы сможете запросить

https://graph.facebook.com/me/
2 голосов
/ 10 августа 2010

Добавление параметра type возвращает auth_token для уровня приложения, поэтому лучше его пропустить. Что сработало для меня после бесчисленных попыток и комбинаций, так это использование в вызове /oath/access_token того же параметра redirect_url, который использовался при вызове /oath/authorize.
Таким образом, полная последовательность действий для авторизации вашего приложения от имени пользователя:

1. позвонить или перенаправить на:

"https://graph.facebook.com/oauth/authorize?client_id=" + my_clientId + "&scope=publish_stream,offline_access,manage_pages" + "&redirect_uri=" + "http://my_redirect_url?blah" 

2. на странице, расположенной по адресу return_url выше, отправьте запрос или что-либо еще на этот URL:

"https://graph.facebook.com/oauth/access_token?client_id=" + client_id + "&client_secret=" + secret + "&code=" + Request.QueryString["code"] + "&redirect_uri=" + "http://my_redirect_url?blah"
1 голос
/ 01 сентября 2010

У меня была такая же проблема только в IE8. Решением для меня была отправка access_token в запросе API. Примерно так:

FB.api('/me/friends?access_token=<YOUR TOKEN>

Я получил свой токен через PHP следующим образом:

// Create our Application instance.
$facebook = new Facebook(array(
    'appId'  => '<API_ID>',
    'secret' => '<SECRET>',
    'cookie' => false,
));

$session = $facebook->getSession();
$token = $session['access_token'];
0 голосов
/ 11 июня 2011

У меня была такая же проблема, но я избавился от type=client_cred и убедился, что параметр redirect_uri одинаковый при авторизации, а access_token call исправил проблему.

0 голосов
/ 22 апреля 2011

Я на самом деле заметил, что если у вашего обратного Ури нет косой черты в конце, у вас есть проблемы. В настоящее время я тестирую в браузере, и return_uri = https://mydomain.com не работает, но return_uri = https://mydomain.com/ работает. Если я использую первый, я получаю «Ошибка проверки кода подтверждения».

Это кажется немного странным, но я просто пропустил слово в спецификации / инструкции где-то. Я потерял два часа своей жизни из-за этого.

0 голосов
/ 18 июня 2010

Я хочу указать, что вроде было сказано в блоге Бена Биддингтона, и что я заметил, посмотрев на «искаженный» access_token в первоначальном вопросе. Другие говорили подобные вещи в этой теме, но я хочу быть явным.

Токен на самом деле не деформирован, а скорее токен, который позволяет вам выполнять действия от имени приложения, а не от пользователя. Это маркер, который вы будете использовать, если хотите получить информацию обо всех пользователях приложения или просмотреть информацию о вашем приложении и т. Д., Причем запросы обычно поступают с вашего сервера, а не с клиента. Этот тип токена получается с помощью параметра type = client_cred. Если вы хотите что-то делать от имени пользователя, не указывайте type = client_cred и убедитесь, что вы указали следующие параметры в своем вызове http://graph.facebook.com/oauth/access_token:

'client_id' => APP_ID
'redirect_uri' => REDIRECT_URI
'client_secret' => APP_SECRET
'code' => $_GET['code']

Я написал это как пары ключ-значение массива PHP, но я думаю, вы поняли. Значение GET кода получается после первоначального вызова http://graph.facebook.com/oauth/authorize со следующими параметрами:

'client_id' => APP_ID
'redirect_uri' => "http://your.connect.url/some/endpoint"

Надеюсь, это поможет! Документы Facebook говорят, но не очень хорошо, что получение access_token - это процесс с двумя запросами.

0 голосов
/ 18 мая 2010

У меня точно такая же проблема. Несколько вещей, которые я сделал, чтобы решить эту проблему:

  1. Сначала попробуйте все в браузере, чтобы убедиться, что URL-адреса правильные на каждом этапе
  2. Убедитесь, что URL перенаправления идентичен, а не просто эквивалентен. Параметры в том же порядке, кодирующие то же
  3. Не используйте type = client_cred или что-либо еще по этому вопросу
  4. Кодировать любые амперсанды в redirect_url (но не в остальной части URL), например http://example.com/fb?foo=234%26bar=567. Этот вызвал у меня больше всего проблем. Когда запускалась страница обратного вызова, включался только URL-адрес перед первым амперсандом, поскольку предполагалось, что этот амперсанд является частью URL-адреса для graph.facebook.com, , а не частью redirect_url. Затем я получал значения из строки запроса, чтобы поместить их в redirect_url для второго вызова, но их там не было. Как только я закодировал амперсанды, они появились правильно.
  5. В кодированных параметрах строки запроса нет пустых значений (например,? Foo =% 26bar = 123)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...