403:在 google 驱动器 api php 中创建文件夹时权限不足
403 : Insufficient Permission while creating an folder in google drive api php
我正在实施 google 驱动器 api 以在我的应用程序中实施。我从 google-drive-client-php 文档中完成了所有代码配置。但是我得到了这个权限错误。请给我任何提示:
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->setAccessType("offline");
$client->setScopes("https://www.googleapis.com/auth/drive");
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$drive = new Google_Service_Drive($client);
$fileMetaData = new Google_Service_Drive_DriveFile(array(
'name' => 'RootFolder',
'mimeType' => 'application/vnd.google-apps.folder'));
$parentFolder = $drive->files->create($fileMetaData, array(
'fields' => 'id'
));
$permission = new Google_Service_Drive_Permission();
$permission->setValue('me');
$permission->setType('anyone');
$permission->setRole('writer');
$drive->permissions->insert($parentFolder->getId(), $permission);
echo "<pre>";
echo json_encode($parentFolder);
} else {
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . '/callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
谢谢你:)
我找到了解决问题的方法
删除
$permission->setValue('me');
并将此权限方法更改为
$drive->permissions->insert($parentFolder->getId(), $permission);
到
$drive->files->create($fileMetaData, array('fields' => 'id'));
在 google 驱动器 api 中插入一个 setValue() 方法已被弃用,因此它不起作用。
所以你要求...
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
虽然您实际上可能需要...
$client->addScope(Google_Service_Drive::DRIVE);
作为参考,这里是 API 范围的映射:
/** View and manage the files in your Google Drive. */
const DRIVE = "https://www.googleapis.com/auth/drive";
/** View and manage its own configuration data in your Google Drive. */
const DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata";
/** View and manage Google Drive files and folders that you have opened or created with this app. */
const DRIVE_FILE = "https://www.googleapis.com/auth/drive.file";
/** View and manage metadata of files in your Google Drive. */
const DRIVE_METADATA = "https://www.googleapis.com/auth/drive.metadata";
/** View metadata for files in your Google Drive. */
const DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly";
/** View the photos, videos and albums in your Google Photos. */
const DRIVE_PHOTOS_READONLY = "https://www.googleapis.com/auth/drive.photos.readonly";
/** View the files in your Google Drive. */
const DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly";
/** Modify your Google Apps Script scripts' behavior. */
const DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts";
我正在实施 google 驱动器 api 以在我的应用程序中实施。我从 google-drive-client-php 文档中完成了所有代码配置。但是我得到了这个权限错误。请给我任何提示:
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->setAccessType("offline");
$client->setScopes("https://www.googleapis.com/auth/drive");
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$drive = new Google_Service_Drive($client);
$fileMetaData = new Google_Service_Drive_DriveFile(array(
'name' => 'RootFolder',
'mimeType' => 'application/vnd.google-apps.folder'));
$parentFolder = $drive->files->create($fileMetaData, array(
'fields' => 'id'
));
$permission = new Google_Service_Drive_Permission();
$permission->setValue('me');
$permission->setType('anyone');
$permission->setRole('writer');
$drive->permissions->insert($parentFolder->getId(), $permission);
echo "<pre>";
echo json_encode($parentFolder);
} else {
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . '/callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
谢谢你:)
我找到了解决问题的方法
删除
$permission->setValue('me');
并将此权限方法更改为
$drive->permissions->insert($parentFolder->getId(), $permission);
到
$drive->files->create($fileMetaData, array('fields' => 'id'));
在 google 驱动器 api 中插入一个 setValue() 方法已被弃用,因此它不起作用。
所以你要求...
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
虽然您实际上可能需要...
$client->addScope(Google_Service_Drive::DRIVE);
作为参考,这里是 API 范围的映射:
/** View and manage the files in your Google Drive. */
const DRIVE = "https://www.googleapis.com/auth/drive";
/** View and manage its own configuration data in your Google Drive. */
const DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata";
/** View and manage Google Drive files and folders that you have opened or created with this app. */
const DRIVE_FILE = "https://www.googleapis.com/auth/drive.file";
/** View and manage metadata of files in your Google Drive. */
const DRIVE_METADATA = "https://www.googleapis.com/auth/drive.metadata";
/** View metadata for files in your Google Drive. */
const DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly";
/** View the photos, videos and albums in your Google Photos. */
const DRIVE_PHOTOS_READONLY = "https://www.googleapis.com/auth/drive.photos.readonly";
/** View the files in your Google Drive. */
const DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly";
/** Modify your Google Apps Script scripts' behavior. */
const DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts";