Bagaimana untuk menyegarkan semula token akses Dropbox API dalam PHP tanpa log masuk
P粉239164234
P粉239164234 2023-08-26 11:28:49
0
2
640
<p>Saya menggunakan https://github.com/kunalvarma05/dropbox-php-sdk untuk memuat naik fail ke dropbox saya. </p> <p>Di sini saya tidak memerlukan mana-mana pengguna untuk menggunakan dropbox, hanya untuk pengguna dalaman supaya saya boleh memuat naik fail ke dropbox saya. </p> <p>Saya menjana token akses daripada apl Dropbox dan semuanya berfungsi dengan baik, tetapi token itu tamat tempoh selepas beberapa ketika. Saya melakukan log masuk Oauth untuk menjana semula token, tetapi token baharu juga tamat tempoh selepas beberapa ketika. </p> <p>Bagaimanakah saya boleh menjana semula token atau mendapatkan token tahan lama supaya skrip saya boleh memuat naik fail ke dropbox selepas setiap kali pengguna memuat naik fail baharu? </p> <p>Saya menggunakan kod mudah ini</p> <pre class="brush:php;toolbar:false;">include('dropbox/vendor/autoload.php'); $app = DropboxApp baharu("client_id", "client_secret", 'access_token'); $dropbox = Dropbox baharu($app); $data = []; // di sini mendapatkan senarai fail daripada pangkalan data jika (!$data->isEmpty()) { foreach ($data sebagai $list) { $filePath = 'folder_path/'.$list->file_name; $fileName = $list->file_name; cuba { // Cipta Fail Dropbox daripada Path $dropboxFile = DropboxFile baharu($filePath); // Muat naik fail ke Dropbox $uploadedFile = $dropbox->upload($dropboxFile, "/folder_name/" . $fileName, ['autorename' => true]); // Fail Dimuat Naik echo $uploadedFile->getPathDisplay(); } tangkap (DropboxClientException $e) { print_r($e->getMessage()); } } }</pre></p>
P粉239164234
P粉239164234

membalas semua(2)
P粉066224086

Dropbox tidak lagi menawarkan pilihan untuk mendapatkan semula token akses jangka panjang baharu. Sebaliknya, ia mengeluarkan token akses jangka pendek dan token muat semula pilihan dan bukannya token akses jangka panjang.

Apl masih boleh mendapatkan akses jangka panjang dengan meminta akses "luar talian", pada ketika itu apl menerima "token muat semula" dan boleh mendapatkan semula token akses jangka pendek baharu seperti yang diperlukan tanpa campur tangan pengguna manual selanjutnya. Anda boleh mendapatkan maklumat lanjut dalam Panduan OAuth dan Dokumentasi Kebenaran.

Proses mendapatkan semula token akses dan token muat semula pilihan tidak boleh diautomatikkan sepenuhnya. Ini memerlukan pengguna melakukannya secara manual sekurang-kurangnya sekali. Jika aplikasi anda perlu mengekalkan akses jangka panjang tanpa memerlukan pengguna memberi kebenaran semula secara manual berulang kali, ia harus meminta akses "luar talian" untuk mendapatkan token muat semula. Token muat semula tidak tamat tempoh dan boleh disimpan dan digunakan semula untuk mendapatkan token akses jangka pendek baharu apabila diperlukan tanpa memerlukan pengguna untuk membenarkan semula aplikasi secara manual.

P粉364642019

Saya jumpa penyelesaiannya

Langkah 1: Log masuk buat kali pertama melalui URL kebenaran/log masuk, selepas melengkapkan pengesahan, anda akan mendapat token akses dan token segar semula, simpan token segar semula dalam pangkalan data atau fail persekitaran. Ia mempunyai jangka hayat yang panjang. (https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Authentication-and-Authorization)

Langkah 2: Menggunakan token muat semula, jana token akses baharu menggunakan kod berikut

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

Panggil fungsi ini untuk mendapatkan token akses baharu

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan