php - 未经同意屏幕授权访问个人 GoogleDrive
问题描述
我正在尝试通过 cron 作业将备份文件上传到 GoogleDrive。
我面临的主要问题是我必须使用服务帐户来上传文件,因为据我了解,Oauth 服务将需要使用同意屏幕,这显然不是 cron 作业的选项。
因此,就目前而言,文件正在上传,不是上传到我的个人驱动器,而是上传到附加到谷歌服务帐户电子邮件的“某处”存在的驱动器,例如something@iam.gserviceaccount.com
. 没有 gui(我可以找到)可以在其中管理上传到此 ghost 帐户的文件(也许如果我有 gsuite 这会有所不同?)。但是,我可以通过 api 访问它并以这种方式管理它。
我最终做的是使用 api 创建一个文件夹,并将所有备份文件放在该父级中。该文件夹本身是通过以下方式创建/与我的个人驱动器共享的:
public function makeFolder($folder, $opts = []) {
if (($id = $this->folderExists($folder))) {
return $id;
}
$fileMetadata = new Google_Service_Drive_DriveFile([
'name' => $folder,
'mimeType' => $this->folderMime
]);
$folder = $this->service->files->create($fileMetadata, array('fields' => 'id'));
if (isset($opts['email'])) {
$userPermission = new Google_Service_Drive_Permission(array(
'type' => 'user',
'role' => 'writer',
'emailAddress' => $opts['email'] //my email/drive something@gmail.com
));
$this->service->permissions->create($folder->id, $userPermission, array('fields' => 'id'));
}
return $folder->id;
}
我现在可以管理我个人驱动器中“与我共享”下文件夹中的文件。我无法永久删除文件,并且普遍缺乏“所有权”并不理想。
考虑到我的参数,是否有更简化的方法来执行此操作?在一个完美的世界里,这个 API 就像 Dropbox 一样,本质上给你一个访问令牌来完全绕过同意屏幕。
我正在使用最新版本的谷歌客户端 api。
解决方案
查看 OAuth刷新令牌。当用户授权您的应用程序时,您会收到一个访问令牌和一个刷新令牌。访问令牌用于授权 API 调用,刷新令牌用于获取新的访问令牌。因此,这将让您在每次运行 cron 作业时生成访问令牌,但用户只需输入一次身份验证详细信息。刷新令牌确实会过期,但这通常是在更长的时间之后。
推荐阅读
- wordpress - MAMP 可以被黑到什么程度?
- python - 在 Python whl 文件中模拟函数
- swift - 使用多个关键字进行 Google 附近搜索
- tensorflow - 如何在 keras 中使用额外的变量自定义损失函数
- android - Viewpager 上的运动布局不起作用
- python-3.x - 如何获取函数的返回值并将该输出输入到使用 tkinter 和 python 的用户界面中的相应字段中
- javascript - 从原始查询中解析模型和关联 hasMany
- android - 如何在颤振项目中重命名应用程序包?
- xaml - UWP中数据模板内的DataBinding
- java - 是否可以在从 Pub/Sub 写入 BigQuery 的 Google Cloud Dataflow 管道中捕获丢失的数据集 java.lang.RuntimeException?