【问题标题】:Cannot Store Instagram API access_token with PHP无法使用 PHP 存储 Instagram API access_token
【发布时间】:2012-01-27 10:29:30
【问题描述】:

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

但是,一旦您刷新页面,所有数据都会丢失,而且脚本似乎再也找不到我的访问令牌了。我尝试将其存储到 PHP 会话变量中 - 但也许我的整个过程不正确?一旦执行 OAuth,我只想在整个网站中保持相同的用户会话。

您可以在这里查看小应用程序:http://spyrestudios.com/demos/instagram-api/index.php

此外,我的回调 URL 是 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;

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

提前致谢!

【问题讨论】:

  • 您的意思是您从 OAuth 系统获取的数据丢失了?
  • @UmeshAwasthi 是的,看起来是这样。在您第一次登录后,所有数据都被提取了 - 但如果您刷新页面,或转到新页面并点击“返回”,一切都会丢失。我已将令牌存储为会话变量,我认为它会在用户注销之前保持活动状态,但也许我正在接近这个错误??

标签: php api oauth access-token


【解决方案1】:

假设 $accessToken 实际上正确存储在会话中,您已经看起来不错(尽管我没有使用 Instagram 的经验)。

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

【讨论】:

  • 是的,这就是秘密令牌的来源吗?我一直在浏览 Instagram 的 API 文档,但在任何地方都找不到信息。我可以尝试设置一个 cookie,看看这是否可行。
  • 您是否将令牌存储在会话数据或 cookie 中是无关紧要的。关键是,在某些时候,您将不得不反馈令牌以验证用户身份,否则您最好不要存储它。访问令牌的全部目的是在整个网站上验证用户,而不是在每次页面加载时都要求他们“登录”。目前你已经获得了“部分登录”的权利,但是一旦用户移动到不同的页面,还没有办法验证用户——这就是令牌的用途。
【解决方案2】:

以防万一你还在乎..

问题是当您刷新或返回时,刷新会再次点击 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”页面,也无法返回该页面。

【讨论】:

  • 谢谢,我仍然很在意,因为这让我很困扰。感谢您的回复,这是有道理的
【解决方案3】:

这对我有用,而不是原始文件 instagammy.php

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多