首页 > 解决方案 > 无需登录即可验证 Google 云端硬盘上传

问题描述

在不使用我的浏览器手动验证的情况下将 zip 文件上传到谷歌驱动器时需要您的帮助,以便我可以自动安排备份。

我的身份验证和上传代码如下:

    $client = new Google_Client();
    $client->setClientId('clientid');
     $client->setClientSecret('clientsecret');
     $client->setAccessType("offline");


$client->setRedirectUri('http://localhost:60/pathtofile.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive.file'));

session_start();

if (isset($_GET['code']) || (isset($_SESSION['access_token']) && $_SESSION['access_token'])) {
    if (isset($_GET['code'])) {
        $client->authenticate($_GET['code']);
        $_SESSION['access_token'] = $client->getAccessToken();
    } else
        $client->setAccessToken($_SESSION['access_token']);

    $service = new Google_Service_Drive($client);

    //Insert a file
    $file = new Google_Service_Drive_DriveFile();
    //$file->setName(uniqid().'.zip');
    $file->setName($zipName . '.zip');
    $file->setDescription('Testing document ZIP backups');
    $file->setMimeType('application/zip');

    $data = file_get_contents($zipPath = $publicPath . '\\removedorgname\\backups\\' . $zipName . '.zip');

    $createdFile = $service->files->create($file, array(
          'data' => $data,
          'mimeType' => 'application/zip',
          'uploadType' => 'multipart'
        ));

    print_r($createdFile);

} else {
    $authUrl = $client->createAuthUrl();
    header('Location: ' . $authUrl);
    exit();
}

我面临的问题是它要求我手动登录谷歌帐户。我已经研究过刷新令牌的概念,但不明白如何实现它。

标签: phpgoogle-drive-apigoogle-oauthgoogle-api-php-clientgoogle-api-client

解决方案


我想我已经找到了解决问题的方法,这是正确的还是错误的?

  1. 当谷歌提示你这样做时登录(仅限第一次)

现在您有了访问令牌(将过期),您需要刷新令牌。

  $_SESSION['access_token'] = $client->getAccessToken();

    $token = $client->getAccessToken();
    var_dump($token;)

您需要 var_dump 访问令牌,这将为您提供刷新代码。

然后,一旦我有了刷新代码,我就使用这段代码来检查访问令牌是否已过期,以及是否要使用刷新令牌来获取访问令牌。

if ($client->isAccessTokenExpired()) {

     $client->fetchAccessTokenWithRefreshToken('removedtoken');

 }

我仍然需要从这个访问令牌中提取新的刷新令牌,并将刷新令牌保存在某个地方,以便在这个访问令牌过期时使用。


推荐阅读