Недопустимый доступ в 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
Ответы
Ответ 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
исправлены.