搜索

首页  >  问答  >  正文

无需登录的情况下如何在PHP中刷新Dropbox API的访问令牌

<p>我正在使用https://github.com/kunalvarma05/dropbox-php-sdk来上传文件到我的dropbox。 </p> <p>这里我不需要任何用户使用dropbox,只是为了内部用户,所以我可以上传文件到我的dropbox。 </p> <p>我从Dropbox应用程序生成了访问令牌,一切正常,但令牌在一段时间后会过期。我进行了一次Oauth登录来重新生成令牌,但新的令牌在一段时间后也会过期。 </p> <p>我该如何重新生成令牌或获取长期有效的令牌,以便在每次用户上传新文件后,我的脚本可以将文件上传到dropbox?</p> <p>我正在使用这段简单的代码</p> <pre class="brush:php;toolbar:false;">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()); } } }</pre></p>
P粉239164234P粉239164234507 天前693

全部回复(2)我来回复

  • P粉066224086

    P粉0662240862023-08-27 00:33:27

    Dropbox不再提供检索新的长期访问令牌的选项。相反,它发放短期访问令牌和可选的刷新令牌,而不是长期访问令牌。

    应用程序仍然可以通过请求“离线”访问来获得长期访问权限,此时应用程序会收到一个“刷新令牌”,可以根据需要检索新的短期访问令牌,而无需进一步手动用户干预。您可以在OAuth指南授权文档中找到更多信息。

    无法完全自动化检索访问令牌和可选刷新令牌的过程。这需要用户手动进行至少一次。如果您的应用程序需要在不需要用户重复手动重新授权的情况下保持长期访问权限,则应该请求“离线”访问,以获得刷新令牌。刷新令牌不会过期,可以存储并重复使用,以在需要时获取新的短期访问令牌,而无需用户手动重新授权应用程序。

    回复
    0
  • P粉364642019

    P粉3646420192023-08-27 00:13:53

    我找到了解决方案

    步骤1:首次通过授权/登录URL登录,完成身份验证后,您将获得访问令牌和刷新令牌,将刷新令牌保存在数据库或环境文件中。它的寿命很长。 (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;
        }

    调用此函数以获取新的访问令牌

    回复
    0
  • 取消回复