suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So aktualisieren Sie das Zugriffstoken der Dropbox-API in PHP, ohne sich anzumelden

<p>Ich verwende https://github.com/kunalvarma05/dropbox-php-sdk, um Dateien in meine Dropbox hochzuladen. </p> <p>Hier benötige ich keine Benutzer, die Dropbox verwenden, sondern nur interne Benutzer, damit ich Dateien in meine Dropbox hochladen kann. </p> <p>Ich habe das Zugriffstoken über die Dropbox-App generiert und alles funktioniert einwandfrei, aber das Token läuft nach einiger Zeit ab. Ich habe eine OAuth-Anmeldung durchgeführt, um das Token neu zu generieren, aber auch das neue Token läuft nach einer Weile ab. </p> <p>Wie kann ich das Token neu generieren oder ein langlebiges Token erhalten, damit mein Skript die Datei jedes Mal, wenn der Benutzer eine neue Datei hochlädt, in die Dropbox hochladen kann? </p> <p>Ich verwende diesen einfachen Code</p> <pre class="brush:php;toolbar:false;">include('dropbox/vendor/autoload.php'); $app = new DropboxApp("client_id", "client_secret", 'access_token'); $dropbox = neue Dropbox($app); $data = []; // Hier wird eine Liste der Dateien aus der Datenbank abgerufen if (!$data->isEmpty()) { foreach ($data as $list) { $filePath = 'folder_path/'.$list->file_name; $fileName = $list->file_name; versuchen { // Dropbox-Datei aus Pfad erstellen $dropboxFile = new DropboxFile($filePath); // Laden Sie die Datei in Dropbox hoch $uploadedFile = $dropbox->upload($dropboxFile, "/folder_name/" . $fileName, ['autorename' => true]); // Datei hochgeladen echo $uploadedFile->getPathDisplay(); } Catch (DropboxClientException $e) { print_r($e->getMessage()); } } }</pre></p>
P粉239164234P粉239164234463 Tage vor643

Antworte allen(2)Ich werde antworten

  • P粉066224086

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

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

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

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

    Antwort
    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;
        }

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

    Antwort
    0
  • StornierenAntwort