Я просканировал множество различных ответов, но я все еще немного смущен тем, как я должен иметь дело с токенами доступа к facebook. Одна из основных проблем, с которыми я сталкиваюсь, связана с тем, какая информация хранится в моем браузере. Например, я вхожу в приложение, истекает срок действия токена, я не могу войти в систему снова, пока не удалю настройки cookie / приложения в браузере.
Я наткнулся на эту тему: как продлить срок действия токена доступа с момента отмены офлайн-доступа
Что показало мне, как создать расширенный токен доступа через php.
Мои вопросы:
1. Нужно ли хранить токен доступа где угодно?
2. Что происходит, когда токен доступа истекает или становится недействительным? На данный момент мое приложение просто перестает работать, когда истекает срок действия краткосрочного доступа.
3. Есть ли способ, которым я должен обращаться с ними, чтобы проверить, истек ли срок их действия? Я использую php sdk и в основном использовал стандартный if ($ user) … Вот так:
require 'sdk/src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'XXXXXXXXXXXXXXXXXXXXX', 'secret' => 'XXXXXXXXXXXXXXXXXXXXX', )); $user = $facebook->getUser(); if( $user ){ try{ $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } if (!$user){ $params = array( 'scope' => 'email', ); $loginUrl = $facebook->getLoginUrl( $params ); echo '<script type="text/javascript"> window.open("'. $loginUrl .'", "_self"); </script>'; exit; } if( $user ){ $access_token = $facebook->getExtendedAccessToken(); $get_user_json = "https://graph.facebook.com/me?access_token=" . $access_token; // Rest of my code here... }
, Должен ли я передавать токен доступа между страницами, или это нормально просто называть его снова в верхней части каждой страницы следующим образом:
$facebook = new Facebook(array( 'appId' => 'XXXXXXXXXXXX', 'secret' => 'XXXXXXXXXXXX', 'redirect_uri' => 'http://localhost:8000/', )); $token = $facebook->getExtendedAccessToken();
Давайте рассмотрим ваши вопросы:
Нужно ли хранить токен доступа где угодно?
Это зависит от вашего приложения. Прежде всего спросите себя, вам нужно выполнять действия от имени пользователя, пока он не присутствует (не входит в ваше приложение)?
Если да , то вам нужно расширить токен пользователя, который можно сделать с помощью PHP-SDK, вызвав этот метод, пока у вас есть действительный сеанс пользователя: setExtendedAccessToken()
.
Также вы должны обратиться к этому документу: Расширение токенов доступа
Что происходит, когда токен доступа истекает или становится недействительным? … Есть ли способ, которым я должен обращаться с ними, чтобы проверить, истек ли срок их действия?
Вот где предложение catch в вашем коде пригодится, в то время как в примере с facebook регистрируется ошибка ( error_log($e);
) вы должны обращаться с ней!
В Facebook уже есть урок об этом: How-To: обрабатывать истекшие токены доступа .
Также вы должны обратиться к таблице «Ошибки» и соответствующим образом скорректировать код.
Есть ли что-то еще, что я должен делать для обработки жетонов?
См. Выше.
Должен ли я передавать токен доступа между страницами или это нормально, чтобы просто называть его снова в верхней части каждой страницы
Вам не нужно ничего делать, потому что PHP-SDK будет обрабатывать токен для вас; вы заметили, что вы вызываете: $user_profile = $facebook->api('/me');
без добавления пользователя access_token
?
SDK добавляет его со своего конца, поэтому вам не нужно беспокоиться об этом.
У меня была одна и та же проблема, но я решил ее с некоторой помощью. Я использую php-sdk для подключения к API Facebook, поэтому я просто сделал это.
$facebook = new Facebook(array( 'appId' => 'API_ID', 'secret' => 'SECRET', )); // Get User $user = $facebook->getUser(); // Verifing if user is logged in. if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Verify if user is logged in, if it is... Save the new token. if($user){ // Request the access_token to the $access_token = $facebook->getAccessToken() // Saving the new token at DB. $data = array('access_token' => $access_token); $this->db->where('userid',$user); $this->db->update('facebook', $data); }