为什么刷新令牌每 7 天过期一次?它是否会影响生产中的文件上传

Why do Refresh Token expires after every 7 days ? Does it affects the file upload on production

提问人:Reshma Gawade 提问时间:9/27/2023 最后编辑:Reshma Gawade 更新时间:9/27/2023 访问量:30

问:

我使用 Google Drive 的 API 实现了一个 Laravel 网络应用程序,用于存储。我 https://gist.github.com/sergomet/f234cc7a8351352170eb547cccd65011 使用了本教程。 当我尝试在谷歌驱动器上上传文件时,我面临每 7 天刷新一次令牌过期的问题。因此,如果刷新令牌已过期,它会影响我需要在生产环境中部署的 google 驱动器上的文件上传。

我尝试了这段代码,这个故事的寓意是,无论访问令牌过期还是刷新令牌过期,而文件上传流程都不应该出现错误

public function uploadFile(UploadedFile $uploadedFile, string $file,string $folderId)
    {
        $client = new Google_Client();
        $client->setClientId(env('GOOGLE_DRIVE_CLIENT_ID'));
       $client->setClientSecret(env('GOOGLE_DRIVE_CLIENT_SECRET'));
       $client->refreshToken(env('GOOGLE_DRIVE_REFRESH_TOKEN'));
        $this->refreshTokenIfNeeded($client);
        $fileName = $uploadedFile->getClientOriginalName();
        $mimeType = $uploadedFile->getClientMimeType();
        $fileContent = file_get_contents($uploadedFile);
        $fileMetadata = new Google_Service_Drive_DriveFile(array(
            'name' => $fileName,
            'parents' => array($folderId)
        ));
        //file upload code
}
 public function refreshTokenIfNeeded(Google_Client $client): void
    {

        if ($client->isAccessTokenExpired()) {
          $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
           $newAccessToken = $client->getAccessToken();
            $this->saveAccessTokenToStorage($newAccessToken);
    }
 else {
            $oldAccessToken = $client->getAccessToken();
            $this->saveAccessTokenToStorage($oldAccessToken);
        }
    }

    public function saveAccessTokenToStorage($newAccessToken): void
   {
       $accessTokenJson = json_encode($newAccessToken);
        $credentialsFilePath = env('GOOGLE_CREDENTIALS_FILE');
       Storage::put("$credentialsFilePath", $accessTokenJson);
    }
}
php laravel-5 google-drive-api oauth-refresh-token

评论

2赞 nice_dev 9/27/2023
如果刷新令牌已过期,请获取新令牌。这绝不会影响 G 驱动器上已上传的文件。
1赞 CBroe 9/27/2023
Google Cloud Platform 以任何方式参与这里,并且仍处于“测试”状态......?developers.google.com/identity/protocols/oauth2#expiration:“如果 Google Cloud Platform 项目为外部用户类型配置了 OAuth 同意屏幕,并且发布状态为”正在测试“,则会颁发一个刷新令牌,该令牌将在 7 天后过期,除非请求的唯一 OAuth 范围是名称、电子邮件地址和用户配置文件的子集”
0赞 Reshma Gawade 9/27/2023
我的访问令牌已过期,但它没有执行fetchAccessTokenWithRefreshToken(),你能建议我在哪里犯错吗?

答: 暂无答案