2012-04-05 3 views
2

Я настраиваю сайт, который использует проверки подлинности FB и токены доступа для решения проблемы устаревания offline_access и, в частности, делает fb_exchange_token, чтобы получить токены с расширенной длительностью для пользователей сайта. Кажется, это работает, но у меня есть некоторые вопросы. Мой основной подход:Re offline_access debrecation: Когда нужно делать fb_exchange_token?

  • Я получаю пользователь вошел через обычную серверном процедуру назад и вперед, наконец, дает мне действительный маркер доступа для пользователя. Это работает отлично и, кажется, действует в течение 5300 секунд или около того, как стандартные/оригинальные жетоны.

  • Затем я сразу же вызываю вызов fb_exchange_token; это преуспевает и дает мне новый access_token, который хорош в течение нескольких месяцев. Это токен, который мой сайт сохраняет для дальнейшего использования, когда он делает что-то от имени пользователя.

Это имеет смысл, не так ли? Кажется немного лишним сделать один звонок сразу за другим, но он дает мне токен продолжительной жизни, и это то, что я хочу. Я предполагаю, что могу использовать оригинальный токен до тех пор, пока он длится и не беспокоится об обмене, пока не истечет первоначальный токен, но (а) кажется, что я мог бы также получить и использовать расширенный с самого начала и (б) мне не ясно, что истекший токен можно обменять на токен с расширенной продолжительностью.

Итак: Кто-нибудь видит какие-либо проблемы с этим подходом? Благодаря!

ответ

2

a) Да, этот подход работает хорошо. Я делаю это с некоторыми из моих приложений.

b) См. Третий пункт в этом FAQ. http://dominicminicoopers.blogspot.com/2012/03/facebook-access-tokens-and-offline.html

Могу ли я обменять свой маркер доступа 60 дня для нового маркеров доступа 60 дней?

Нет, извините, вы не можете. Вы можете только обменять действующий (то есть текущий) токен доступа пользователя на расширенный. Вы не можете продлить уже установленный токен .

+0

Право. Но если я могу застраховать, что пользователю придется снова войти в систему в какой-то момент до истечения срока действия расширенного токена, они будут генерировать новый токен 5300 секунд, который, в свою очередь, будет заменен на другой расширенный токен. И т. Д. И т. Д. И т. Д. Я не пытаюсь делать по-настоящему «автономный» материал; Я просто хочу, чтобы токен не истекал, когда пользователь вошел в систему и использовал сайт. И даже если они каким-то образом вошли в систему вне продолжительности расширенного токена, у меня все еще есть старый код для обработки обновленных жетонов. В любом случае, спасибо! –

+0

Спасибо @DMCS за эту ссылку на часто задаваемые вопросы. Таким образом, кажется, что [docs] (https://developers.facebook.com/roadmap/offline-access-removal/) не только запутывают, но и ошибочно, поскольку я читаю _calling это несколько раз в течение того же дня, приведет только к первый вызов, продлевающий время истечения, как подразумевается, вы можете продлевать один раз в день. IMO это изменение не принесет хороший опыт для мобильных клиентов ... –

0

Неужели это работает для людей с 10 апреля? Я заметил вчера, что наши оригинальные токены перестали быть хорошими в течение 60 дней, поэтому я реализовал вызов fb_exchange_token. Но ответ я вернусь еще хорошо только около 2 часов .. то есть это:

access_token = AAAEHLUxxx ... хх & истекает = 4404

Я использую Android SDK, чтобы получить жетоны , и мое приложение не одобрило разрешение offline_access. Он работал хорошо около недели, все токены длились 60 дней.

+0

В моем тестировании сегодня мой оригинальный токен имеет 60-дневный срок действия, и ответ расширения не изменяет токен или срок действия. Но завтра я собираюсь снова продлить, а на следующий день - просто посмотреть, что произойдет. –

+0

Это работает для меня (11 апреля, 8:00 PDT, веб-сайт/PHP) - токен, который я получил, является «коротким», но я могу обменять его на «длинный». –

+0

Странно. Я использую поток на стороне сервера. Когда я включаю перенос для моего приложения, токен доступа имеет 60-дневный срок действия и вызов API расширения не меняет его. Когда я отключу миграцию для одного и того же приложения, токен доступа имеет 6200-секундный срок действия, и вызов API расширения также не изменит его. –

1

Я заметил сегодня, что для того, чтобы токен действительно был расширен, вам необходимо отключить офлайн-режим в настройках вашего приложения. Я пытался весь день, когда этот параметр все еще включен, и я получал стандартные 2-часовые токены, как только я отключил его, и попробовал снова (после повторной аутентификации с помощью FB) мне дали 2-месячный токен. Надеется, что это экономит время людей (документация не совсем понятна вообще).

+0

Хороший звонок здесь. Я не понимал, что мне нужно включить расширенный токен в моих настройках. – Hawkee

0
$url = "https://graph.facebook.com/oauth/access_token?client_id=$client_id&client_secret=$client_secret&grant_type=fb_exchange_token&fb_exchange_token=$fb_access_token"; 
$graph = file_get_contents($url); 
$graph = explode("=", $graph); 
$graph = explode("&", $graph[1]); 
$new_access_token = $graph[0]; 
1

Почему бы не просто сделать что-то подобное (гораздо чище, чем все взрывы)?

$response = $this->facebook->api('/oauth/access_token', 'GET', array(
    'grant_type' => 'fb_exchange_token', 
    'client_id' => $app_id, 
    'client_secret' => $app_secret, 
    'fb_exchange_token' => $access_token 
)); 
parse_str($response, $output_array); 
$long_lived_access_token = $output_array['access_token']; 
$expires = $output_array['expires'];