我使用https://github.com/kunalvarma05/dropbox-php-sdk我的php项目上传文件在dropbox。
在这里,我不需要任何用户使用Dropbox,它只适用于内部用户,因此我可以在我的Dropbox上上传文件。
我从Dropbox应用程序生成了访问令牌,一切正常,但令牌在一段时间后过期。我做了一次 Oauth 登录以重新生成令牌,但新令牌在一段时间后也过期了。
我如何在后端重新生成令牌或获得长寿命令牌,以便我的脚本在用户每次新上传后都可以在dropbox上传文件?
我正在使用这个简单的代码
include('dropbox/vendor/autoload.php');
$app = new DropboxApp("client_id", "client_secret", 'access_token');
$dropbox = new Dropbox($app);
$data = []; // here getting list of files from database
if (!$data->isEmpty()) {
foreach ($data as $list) {
$filePath = 'folder_path/'.$list->file_name;
$fileName = $list->file_name;
try {
// Create Dropbox File from Path
$dropboxFile = new DropboxFile($filePath);
// Upload the file to Dropbox
$uploadedFile = $dropbox->upload($dropboxFile, "/folder_name/" . $fileName, ['autorename' => true]);
// File Uploaded
echo $uploadedFile->getPathDisplay();
} catch (DropboxClientException $e) {
print_r($e->getMessage());
}
}
}
我找到了解决方案
步骤1:第一次通过授权/登录URL登录,您将获得访问令牌和身份验证后的刷新令牌,将此刷新令牌保存在数据库或env文件中。它的寿命很长。(https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Authentication-and-Authorization)
步骤 2:使用刷新令牌 在需要时使用以下代码生成新的访问令牌
public function refreshToken()
{
$arr = [];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.dropbox.com/oauth2/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=refresh_token&refresh_token=<refresh_token_here>");
curl_setopt($ch, CURLOPT_USERPWD, '<APP_KEY>'. ':' . '<APP_SECRET>');
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$result_arr = json_decode($result,true);
if (curl_errno($ch)) {
$arr = ['status'=>'error','token'=>null];
}elseif(isset($result_arr['access_token'])){
$arr = ['status'=>'okay','token'=>$result_arr['access_token']];
}
curl_close($ch);
return $arr;
}
调用此函数以获取新的访问令牌
Dropbox不再提供检索新的长期访问令牌的选项。相反,它发出短期访问令牌和可选的刷新令牌,而不是长期访问令牌。
尽管如此,应用程序仍然可以通过请求“离线”访问来获得长期访问,在这种情况下,应用程序会收到一个“刷新令牌”,可以根据需要检索新的短期访问令牌,而无需进一步的人工干预。您可以在OAuth指南和授权文档中找到更多信息。
不可能完全自动化检索访问令牌和可选刷新令牌的过程。这需要用户手动完成至少一次。如果您的应用需要保持长期访问,而用户无需重复手动重新授权,应用应请求“离线”访问,以便获得刷新令牌。刷新令牌不会过期,可以在需要时重复存储和使用,以获取新的短期访问令牌,而无需用户手动重新授权应用。
在PHP中编码,我尝试初始化Spotify API,不使用重定向uri,只使用client_id和client_secret。我尝试下面的代码:从响应url中提取令牌-Spotify API,但我得到一个NULL结果 我想知道我是否可以在不要求用户登录的情况下访问令牌(参见https://developer.spotify.com/web-api/authorization-guide/#auth
问题内容: 我有个问题。我想防止用户访问页面而不登录jsf2。当用户直接将受限制的页面网址写入浏览器时,他/她应该看不到该页面。就像上述情况那样,他/她必须被重定向到登录页面。如何以编程方式执行此操作? 问题答案: 这取决于您如何设置登录名。您似乎正在使用本地认证,其中将登录用户设置为会话范围的受管Bean的属性。因为使用Java EE提供的容器管理登录名,已经考虑了防止访问受限页面。 假设你已经
问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ
问题内容: 我的页面结构是: 如何在不刷新整个页面的情况下更新/刷新组件? 一旦用户成功登录,我想在标题中隐藏“登录”链接。标题在所有组件/路由中都是通用的。 问题答案: 您可以使用 来在整个应用程序的不同组件之间进行通信。您可以定义一个数据共享服务,其中包含 您可以订阅和发出更改的服务。 定义数据共享服务 在您的 提供商条目中添加。 接下来,将导入到您和您在其中执行登录操作的组件中。在订阅主题更
当我使用自己的客户端id在浏览器中转到以下URL时: https://account-d.docusign.com/oauth/auth?response_type=token 我需要登录,然后我被重定向到:http://localhost:8888/auth#access_token=myAccessToken 现在我有一个节点。在js应用程序中,我想使用我的访问令牌进行API调用,直到现在,我
我正在开发一个企业应用程序,管理员在其中创建新用户(没有注册表单)。我正在使用Firebase Auth,它在很多方面都很棒,但我在我的用例中遇到了一个问题。当您使用时,由此创建的用户将自动登录。当管理员创建用户帐户时,这显然不起作用。有没有办法避免这种行为?谢了。