1

ここで、Dropbox 経由でトークンを取得してテストしようとすると、次のメッセージとともに例外がスローされるという奇妙な問題が発生しています。

HTTP ステータス 401 {"エラー": "指定された OAuth 2 アクセス トークンが存在しないか、有効期限が切れています。"}

Dropbox トークンを生成するとすぐに期限切れになるのはなぜですか?

私のアプリの流れをお見せしましょう:

ユーザーには次の画面が表示されます。

フォーム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 から認証トークンが提供され、それを私のサイトに貼り付けて送信します。フォームを処理するコードは次のとおりです。

      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 が呼び出されて警告が表示されます。トークンが文字通り数秒前に生成されたとしても、これは起こります。

誰かが何が悪いのか教えてもらえますか?

4

1 に答える 1

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>";
  }
于 2014-03-19T23:14:11.353 に答える