Heim > Fragen und Antworten > Hauptteil
P粉0662240862023-08-27 00:33:27
Dropbox不再提供检索新的长期访问令牌的选项。相反,它发放短期访问令牌和可选的刷新令牌,而不是长期访问令牌。
应用程序仍然可以通过请求“离线”访问来获得长期访问权限,此时应用程序会收到一个“刷新令牌”,可以根据需要检索新的短期访问令牌,而无需进一步手动用户干预。您可以在OAuth指南和授权文档中找到更多信息。
无法完全自动化检索访问令牌和可选刷新令牌的过程。这需要用户手动进行至少一次。如果您的应用程序需要在不需要用户重复手动重新授权的情况下保持长期访问权限,则应该请求“离线”访问,以获得刷新令牌。刷新令牌不会过期,可以存储并重复使用,以在需要时获取新的短期访问令牌,而无需用户手动重新授权应用程序。
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; }
调用此函数以获取新的访问令牌