Как расширить маркер доступа пользователей Facebook с помощью PHP SDK?


У меня есть этот код:

$facebook->api("/oauth/access_token?grant_type=fb_exchange_token&client_id=".$facebook->getAppId()."&client_secret=".$facebook->getAppSecret()."&fb_exchange_token=".$user->getFacebookAccessToken());

Он не создает никаких исключений, но возвращает значение null. Я пытаюсь расширить недолговечный токен доступа пользователя Facebook, чтобы он стал долговечным токеном доступа пользователя Facebook. Однако после того, как я сгенерировал новый токен и вызвал этот запрос, пока новый токен был еще жив, я подождал несколько часов и запустил браузер, в котором я не вошел в свою учетную запись facebook. Затем я вошел в систему с тестовым пользователем (в приложение, а не в Facebook), но, к сожалению, он направлял меня к логину Facebook, что означает, что маркер доступа пользователя Facebook был каким-то образом признан недействительным.

Я работал на основе документа, найденного здесь.

Итак, может кто-нибудь просветить меня, как мне отправить запрос, чтобы Facebook действительно продлил жизненный цикл токена? Кроме того, я не уверен, как я могу определить, успешно ли я продлил жизненный цикл токена доступа пользователя Facebook. (Я не фанат Facebook, чтобы сказать, что по крайней мере, и я тоже новичок в API Facebook).

Спасибо, ребята.

РЕДАКТИРОВАТЬ: Я прочитал эту статью и скопировал метод setExtendedAccessToken в свой класс с несколькими изменениями для поддержки моей логики. Теперь код, который пытается продлить жизненный цикл токена доступа пользователя Facebook, выглядит следующим образом:

$facebook->setExtendedAccessToken($user->getFacebookAccessToken());

Теперь он возвращает массив из двух элементов, токена и даты истечения срока действия. Срок годности - "5174078". Я верю, что нахожусь на правильном пути, чтобы решить эту проблему проблема, не так ли?

Author: Lajos Arpad, 2013-07-16

2 answers

Вот что, я думаю, вам следует делать:

  1. Пользователь FB, вошедший в систему, заходит на ваш сайт, и вы получаете для него кратковременный токен через поток на стороне клиента в SDK Javascript или долговечный токен через поток на стороне сервера с PHP или каким-либо другим SDK (похоже, вы уже делаете первый из них)
  2. Если это был недолговечный токен, расширьте его и получите долговечный токен с помощью вызова API для обмена токеном (похоже, вы делаете это тоже)
  3. Сохраните долговечный токен в своей базе данных (не уверен, делаете ли вы это)
  4. Когда пользователь возвращается в ваше приложение в какой-то другой момент, входит в ваше приложение через вашу собственную систему входа, но не входит в Facebook, вы используете кэшированный токен из своей базы данных в ->setaccesstoken(), а затем совершаете вызовы API Facebook от их имени

Я думаю, что шаг 4 - это ваша проблема; Я подозреваю, что вы видите, что пользователь вышел из Facebook и отправляет их снова выполните процедуру авторизации на Facebook, вместо того чтобы заставлять их входить в ваше приложение с помощью вашего собственного механизма входа и повторно использовать маркер, который вы сохранили ранее.

Это прекрасно, но в этом случае вам не нужно хранить токены, и вы можете сделать все это "вживую" и потребовать, чтобы ваши пользователи все еще входили в Facebook, чтобы получить новый токен "вживую" вместо кэширования токена, который вы получили при предыдущем посещении вашего приложения.

 4
Author: Igy, 2013-07-16 15:43:57

Просто к вашему сведению, потому что последние 45 минут я спотыкался с токеном доступа. Через документацию facebook: https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

Который, кажется, немного устарел, я смог вручную продлить свой существующий недолговечный токен доступа с помощью: https://graph.facebook.com/oauth/access_token?
client_id=ИДЕНТИФИКАТОР приложения и client_secret= ИДЕНТИФИКАТОР ПРИЛОЖЕНИЯ& grant_type=fb_exchange_токен& fb_exchange_token=СУЩЕСТВУЮЩИЙ_АКЦЕСС_ТОКЕН

 1
Author: kyle, 2013-12-16 17:27:13