Подтвердить что ты не робот

Недопустимый доступ в Facebook access_token?

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

Я прошел эти шаги, и после вызова /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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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/

Ответ 4

Добавление параметра типа возвращает auth_token для уровня приложения, поэтому лучше Опустить его. То, что сработало для меня после бесчисленных попыток и комбинаций, использует тот же параметр redirect_url в вызове /oath/access_token, который использовался при вызове /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"

Ответ 5

У меня была такая же проблема только в 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'];

Ответ 6

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

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

Ответ 7

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

Токен на самом деле не искажен, а скорее токен, который позволяет вам выполнять действия от имени APP, а не пользователя. Это токен, который вы используете, если хотите получить всех пользователей приложения или просмотреть информацию о своем приложении и т.д. С запросами, обычно поступающими с вашего сервера, а не с клиентом. Этот тип токена получается с помощью параметра 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 - это процесс с двумя запросами.

Ответ 8

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

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

Ответ 9

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