Comment actualiser le jeton d'accès de l'API Dropbox en PHP sans vous connecter
P粉239164234
P粉239164234 2023-08-26 11:28:49
0
2
664
<p>J'utilise https://github.com/kunalvarma05/dropbox-php-sdk pour télécharger des fichiers dans ma dropbox. </p> <p>Ici, je n'ai besoin d'aucun utilisateur pour utiliser Dropbox, uniquement pour les utilisateurs internes afin que je puisse télécharger des fichiers sur ma Dropbox. </p> <p>J'ai généré le jeton d'accès à partir de l'application Dropbox et tout fonctionne correctement, mais le jeton expire après un certain temps. J'ai effectué une connexion Oauth pour régénérer le jeton, mais le nouveau jeton expire également après un certain temps. </p> <p>Comment puis-je régénérer le jeton ou obtenir un jeton de longue durée afin que mon script puisse télécharger le fichier dans Dropbox chaque fois que l'utilisateur télécharge un nouveau fichier ? </p> <p>J'utilise ce code simple</p> <pre class="brush:php;toolbar:false;">include('dropbox/vendor/autoload.php'); $app = new DropboxApp("client_id", "client_secret", 'access_token'); $dropbox = nouveau Dropbox($app); $data = []; // récupère ici la liste des fichiers de la base de données si ($data->isEmpty()) { foreach ($données sous forme de $list) { $filePath = 'folder_path/'.$list->file_name; $fileName = $list->file_name; essayer { // Créer un fichier Dropbox à partir du chemin $dropboxFile = nouveau DropboxFile($filePath); // Téléchargez le fichier sur Dropbox $uploadedFile = $dropbox->upload($dropboxFile, "/folder_name/" . $fileName, ['autorename' => true]); // Fichier téléchargé echo $uploadedFile->getPathDisplay(); } catch (DropboxClientException $e) { print_r($e->getMessage()); } } }</pre></p>
P粉239164234
P粉239164234

répondre à tous(2)
P粉066224086

Dropbox n'offre plus la possibilité de récupérer un nouveau jeton d'accès à long terme. Au lieu de cela, il émet des jetons d'accès à court terme et des jetons d'actualisation facultatifs au lieu de jetons d'accès à long terme.

Les applications peuvent toujours obtenir un accès à long terme en demandant un accès « hors ligne », auquel cas l'application reçoit un « jeton d'actualisation » et peut récupérer de nouveaux jetons d'accès à court terme si nécessaire sans autre intervention manuelle de l'utilisateur. Vous pouvez trouver plus d'informations dans le OAuth Guide et la Authorization Documentation.

Le processus de récupération des jetons d'accès et des jetons d'actualisation facultatifs ne peut pas être entièrement automatisé. Cela nécessite que l'utilisateur le fasse manuellement au moins une fois. Si votre application doit conserver un accès à long terme sans que l'utilisateur ait besoin de réautoriser manuellement à plusieurs reprises, elle doit demander un accès « hors ligne » afin d'obtenir un jeton d'actualisation. Les jetons d'actualisation n'expirent pas et peuvent être stockés et réutilisés pour obtenir de nouveaux jetons d'accès de courte durée en cas de besoin sans que l'utilisateur ait à réautoriser manuellement l'application.

P粉364642019

J'ai trouvé la solution

Étape 1 : Connectez-vous pour la première fois via l'URL d'autorisation/de connexion, après avoir terminé l'authentification, vous obtiendrez un jeton d'accès et un jeton d'actualisation, enregistrez le jeton d'actualisation dans la base de données ou le fichier d'environnement. Il a une longue durée de vie. (https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Authentication-and-Authorization)

Étape 2 : À l'aide du jeton d'actualisation, générez un nouveau jeton d'accès en utilisant le code suivant

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

Appelez cette fonction pour obtenir un nouveau jeton d'accès

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal