And*_*nez 1 php dropbox dropbox-api dropbox-php
我在这里有这个奇怪的问题,我立即通过Dropbox获取令牌并尝试测试它,这个消息抛出异常:
HTTP状态401 {"错误":"给定的OAuth 2访问令牌不存在或已过期."}
为什么Dropbox令牌会在生成后立即过期?
让我告诉你我的应用程序的流程:
用户看到此屏幕:

其中包含以下相关的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();
Run Code Online (Sandbox Code Playgroud)
好吧,我们使用官方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>";
}
Run Code Online (Sandbox Code Playgroud)
但无论令牌有多近,当用户提交令牌时,都会调用catch并显示警告.即使令牌是在几秒钟之前生成的,这种情况也会发生.
有人可以告诉我什么是错的吗?
我忘记了将授权代码转换为访问令牌的步骤.
list($accessToken, $dropboxUserId) = $webAuth->finish($authCode);
Run Code Online (Sandbox Code Playgroud)
换句话说,我确实使用了错误的令牌.哈哈.最后一段代码应该是:
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>";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |