php - 无需登录即可验证 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();
}
我面临的问题是它要求我手动登录谷歌帐户。我已经研究过刷新令牌的概念,但不明白如何实现它。
解决方案
我想我已经找到了解决问题的方法,这是正确的还是错误的?
- 当谷歌提示你这样做时登录(仅限第一次)
现在您有了访问令牌(将过期),您需要刷新令牌。
$_SESSION['access_token'] = $client->getAccessToken();
$token = $client->getAccessToken();
var_dump($token;)
您需要 var_dump 访问令牌,这将为您提供刷新代码。
然后,一旦我有了刷新代码,我就使用这段代码来检查访问令牌是否已过期,以及是否要使用刷新令牌来获取访问令牌。
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken('removedtoken');
}
我仍然需要从这个访问令牌中提取新的刷新令牌,并将刷新令牌保存在某个地方,以便在这个访问令牌过期时使用。
推荐阅读
- python - 使用 Prompt-toolkit 的自定义 Pygments Lexer 引发错误
- json - For 循环不超出 else { continue }
- reactjs - 反应构建给我'npm ERR!代码生命周期'
- elasticsearch - 为什么 Elasticsearch 集群只能发现 1 个节点?
- python - sh:1:ping:从詹金斯运行作业时找不到
- r - 在 R 中使用 options(digits = 18) 时舍入或显示问题
- python - 如何在 python 数据科学中将我的图表从当前图表转换为另一个图表?
- android - 使用 Tensorflow Life 进行恶搞人脸检测
- python - Flask + Dash App 使用 DispatcherMiddleware 集成 - gunicorn vs flask run
- ios - 可调整大小/动态 UICollectionView 宽度(不是单元格动态宽度!!)