无法使用PHP存储Instagram API access_token

时间:2011-12-24 20:07:40

标签: php api oauth access-token

我正在构建一个连接到instagram API的小型网络应用。目前正在使用this library on GitHub,这使事情变得更容易。我可以连接并初次登录正常,页面将显示所有用户数据。

但是一旦刷新页面,所有数据都会丢失,看起来脚本再也找不到我的访问令牌了。我尝试将其存储到PHP会话变量中 - 但是我可能在整个过程中做错了吗?我只是想在执行OAuth后在整个网站上保持相同的用户会话。

您可以在此处查看小型应用:http://spyrestudios.com/demos/instagram-api/index.php

此外,我的回调网址为http://spyrestudios.com/demos/instagram-api/instagammy.php - 这是您连接后即可使用的脚本。但尝试刷新页面,所有数据都消失了!这里还有我的代码*应该使用库来存储当前用户的访问令牌:

session_start();
require_once 'Instagram.php'; // the library code
$config = array(
    'client_id' => 'f0d225aa955c4bd9ae563f87f831efab', // Your client id
    'client_secret' => '377b77afc1274a89bd2df7d77e934689', // Your client secret
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'http://spyrestudios.com/demos/instagram-api/instagammy.php', // The redirect URI you provided when signed up for the service
 );
// Instantiate the API handler object
$instagram = new Instagram($config);
$accessToken = $instagram->getAccessToken();
$_SESSION['InstagramAccessToken'] = $accessToken;

真的很难找到解决方案,所以我很感激能得到的任何帮助。如果需要,愿意发布我的代码示例..

提前致谢!

3 个答案:

答案 0 :(得分:1)

你已经看起来很好(虽然我没有Instagram的经验),假设$ accessToken实际上正在会话中存储。

但肯定在某些时候你需要反馈$ accessToken以便可以验证它。就像我说的,我之前没有使用过Instagram,所以我不知道你会怎么做。

答案 1 :(得分:1)

万一你还在乎......

问题是,当您刷新或返回时刷新再次访问oauth登录页面,但没有授权从中收集信息。从理论上讲,您可以将会话变量的设置包围在一个支票上:

$instagram = new Instagram($config);
$accessToken = $instagram->getAccessToken();
if ($accessToken != '')
    $_SESSION['InstagramAccessToken'] = $accessToken;

这会阻止不需要的人通过清除当前会话值来调用您的oauth登录页面。

但最好还是将着陆页重定向到显示的其他页面。即让你的instagammy.php结束并添加一个

header("Location: http://spyrestudios.com/demos/instagram-api/dosomethinghere.php");
die();

这样,用户就不会在历史记录中看到“instagammy.php”页面,也无法返回到该页面。

答案 2 :(得分:1)

这项工作对我来说,而不是原始文件instagammy.php

$instagram = new Instagram($config);
if ($_SESSION['InstagramAccessToken'] == ''){
    $accessToken = $instagram->getAccessToken();
    $_SESSION['InstagramAccessToken'] = $accessToken;
}else{
    $accessToken = $_SESSION['InstagramAccessToken'];
    $instagram->setAccessToken($_SESSION['InstagramAccessToken']);
}