2013-07-30 1 views
0

Проблема: Я работаю с Instagram Api и аутентифицируюсь с помощью OAuth. Моя проблема в том, что я не могу понять, как сохранить сеанс. В конце концов он истечет, и я больше не хочу снимать фотографии со службы.Как сохранить сеанс OAuth Alive

Предыстория: Я создал страницу настроек в моей настраиваемой панели администрирования, которая использует идентификатор клиента и секрет клиента. Он сохраняет эти значения в моей БД, и мое приложение использует их для подключения к Api. У меня есть кнопка, которую вы нажимаете «Сохранить и подключить», которая обновляет мою БД, а затем запрашивает токены auth из Instagram Api. Все это отлично работает.

Мне нужно: поддерживать сеанс на неопределенный срок или как можно дольше. Я кэширую набор результатов из api, поэтому я не делаю слишком много запросов, а токен доступа хранится в php-сеансе. Однако, когда новый пользователь посещает и не имеет этого токена в своем сеансе, после истечения срока действия кеша и окончания сеанса, фотографии больше не будут доступны?

С нетерпением ждем некоторых возможных решений. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, или мой вопрос в любом случае неясен.

Спасибо,

Zack

+0

Не можете просто запросить новый маркер для клиента Instagram, когда токен истек? – Manuras

+0

Я могу, но я верю, что это вернет пользователя обратно к моему перенаправлению uri, который находится в панели администратора. – zcreative

ответ

0

Вы должны сохранить самый последний маркер доступа в БД или на сервере, и сделать запросы с сохраненным маркером. Имена токенов Instagram являются долговечными (на данный момент не менее). Не стесняйтесь использовать обертку у меня есть here. Таким образом, сеансы не являются проблемой, за исключением того, что вы впервые получаете токен.

$insta = new Instagram(array(
       'client_id' => $client_id, 
       'client_secret' => $secret, 
       'redirect_uri' => $redirect_uri 
      )); 

if(!$insta->isAuthenticated()){ 
      /* Not logged in */ 
      $login_url = $this->insta->getLoginUrl(array(
       'scope' => $scope, 
      )); 
      header("Location: ".$login_url."); 
     } 


/* Save the token */ 
if($this->insta->getToken()) 
{ 
    $token_to_save = $this->insta->getToken(); 
} 

Затем использовать сохраненный маркер:

$ig_saved_token = getTokenFromDBSomewhere();  
$insta->setToken($ig_saved_token); // Set the saved token 
$r = $insta->api('users/self/media/recent'); // Request works with saved token! 
+0

Спасибо, этот метод отлично работает! – zcreative