新生成的Dropbox令牌立即过期

时间:2014-03-19 22:43:10

标签: php dropbox dropbox-api dropbox-php

我遇到这个奇怪的问题,我立即通过Dropbox获取令牌并尝试测试它,这条消息引发异常:

  

HTTP状态401 {“错误”:“给定的OAuth 2访问令牌没有   存在或已过期。“}

为什么Dropbox令牌会在我生成时立即过期

让我向您展示我的应用流程:

用户看到此屏幕:

Form 1

其中包含以下相关的PHP代码:

require "../../includes/dropbox-sdk/Dropbox/autoload.php";
require "../../includes/config.php";
session_start();
session_regenerate_id();
$appInfo = Dropbox\AppInfo::loadFromJsonFile("../../includes/dropbox-sdk/Dropbox/app-info.json");
$webAuth = new Dropbox\WebAuthNoRedirect($appInfo, "Mignori-Box/1.0");

$authorizeUrl = $webAuth->start();

好的,我们使用官方SDK生成一个Dropbox授权URL,这似乎工作正常,用户看到这个屏幕:

Dropbox

他们点击允许,Dropbox为他们提供授权令牌,然后将其粘贴到我的网站中,然后提交。这是处理表单的代码:

      try
      {
          $accessToken = $_POST['authorization_code'];

          $dbxClient = new Dropbox\Client($accessToken, "Mignori-Box/1.0");
          $accountInfo = $dbxClient->getAccountInfo();
      }catch(Exception $e)
      {
          echo "<div class=\"alert alert-danger\">";
          echo "<strong>An error has occurred.</strong><br>" . $e -> getMessage();
          echo "</div>";
      }

但无论令牌最近有多少,当用户提交令牌时,都会调用catch并显示警告。即使令牌是在几秒钟之前生成的,也会发生这种情况。

有人可以告诉我什么是错的吗?

1 个答案:

答案 0 :(得分:5)

我忘记了将授权码转换为访问令牌的步骤。

list($accessToken, $dropboxUserId) = $webAuth->finish($authCode);

换句话说,我确实使用了错误的令牌。哈哈。最后一段代码应该是:

 try
  {
      list($accessToken, $dropboxUserId) = $webAuth->finish($_POST['authorization_code']);

      $dbxClient = new Dropbox\Client($accessToken, "Mignori-Box/1.0");
      $accountInfo = $dbxClient->getAccountInfo();
  }catch(Exception $e)
  {
      echo "<div class=\"alert alert-danger\">";
      echo "<strong>An error has occurred.</strong><br>" . $e -> getMessage();
      echo "</div>";
  }