php:google 云批处理操作未发送身份验证 headers
php: google cloud batch operations not sending authentication headers
我在使用 Google 云批处理操作进行身份验证时遇到问题
PHP 图书馆。我特别想批量删除 Cloud Storage objects。
我正在这样设置:
use Google\Cloud\Storage\StorageClient;
$config = [
'projectId' => <MY Project ID>
'keyFile' => json_decode(file_get_contents( <my json key file> ), true)
];
$google_client = new Google_Client($config);
$google_client->setUseBatch(true);
$delete_batch_storage_client = new Google_Service_Storage($google_client);
$delete_batch = new Google_Http_Batch($google_client, false, NULL, "batch/storage");
$storage_client = new StorageClient($config);
$bucket = $storage_client->bucket(<my bucket name>);
$params = [
'prefix' => <my image path>,
'fields' => 'items/name, items/size, items/updated'
];
foreach ( $bucket->objects($params) as $object )
{
$delete_batch->add($delete_batch_storage_client->objects->delete($bucket->name(), $object->name()));
}
$result = $delete_batch->execute();
batch->execute() 的结果是:
"Anonymous caller does not have storage.objects.delete access to the Google Cloud Storage object."
在创建的批处理上转储一些调试信息,我看不到
authentication headers 要么在顶层,要么在个人 delete
调用级别。使用我的服务帐户初始化 Google_Client 后,并且
然后是具有相同信息的 StorageClient,似乎是身份验证
header 应该在一个级别或另一个级别插入。我的服务帐户有
以下角色:
Editor
Firebase Service Management Service Agent
Owner
Service Account Token Creator
Service Account User
Viewer
我希望 Owner 或 Editor 有足够的权限,所以我是什么
我的设置中缺少?
问题是您的凭据没有权限。这是由于在创建凭据时未请求 OAuth 范围 造成的。
更改此部分:
$config = [
'projectId' => <MY Project ID>,
'keyFile' => json_decode(file_get_contents( <my json key file> ), true)
];
为此:
$config = [
'projectId' => <MY Project ID>,
'keyFilePath' => '/path/to/service-account.json',
'scopes ' => ["https://www.googleapis.com/auth/cloud-platform"]
];
注意:我还简化了密钥文件的使用。
好的,所以我似乎偶然发现了(一个?)解决方案。除了在 Google_Client 对象上调用 setUseBatch 之外,在“$google_client->setUseBatch(true);”之后添加这些行:
$google_client->setAuthConfig( <path to json file> );
$google_client->setScopes( [ 'https://www.googleapis.com/auth/cloud-platform' ] );
看来成功了。
我在使用 Google 云批处理操作进行身份验证时遇到问题 PHP 图书馆。我特别想批量删除 Cloud Storage objects。 我正在这样设置:
use Google\Cloud\Storage\StorageClient;
$config = [
'projectId' => <MY Project ID>
'keyFile' => json_decode(file_get_contents( <my json key file> ), true)
];
$google_client = new Google_Client($config);
$google_client->setUseBatch(true);
$delete_batch_storage_client = new Google_Service_Storage($google_client);
$delete_batch = new Google_Http_Batch($google_client, false, NULL, "batch/storage");
$storage_client = new StorageClient($config);
$bucket = $storage_client->bucket(<my bucket name>);
$params = [
'prefix' => <my image path>,
'fields' => 'items/name, items/size, items/updated'
];
foreach ( $bucket->objects($params) as $object )
{
$delete_batch->add($delete_batch_storage_client->objects->delete($bucket->name(), $object->name()));
}
$result = $delete_batch->execute();
batch->execute() 的结果是:
"Anonymous caller does not have storage.objects.delete access to the Google Cloud Storage object."
在创建的批处理上转储一些调试信息,我看不到 authentication headers 要么在顶层,要么在个人 delete 调用级别。使用我的服务帐户初始化 Google_Client 后,并且 然后是具有相同信息的 StorageClient,似乎是身份验证 header 应该在一个级别或另一个级别插入。我的服务帐户有 以下角色:
Editor
Firebase Service Management Service Agent
Owner
Service Account Token Creator
Service Account User
Viewer
我希望 Owner 或 Editor 有足够的权限,所以我是什么 我的设置中缺少?
问题是您的凭据没有权限。这是由于在创建凭据时未请求 OAuth 范围 造成的。
更改此部分:
$config = [
'projectId' => <MY Project ID>,
'keyFile' => json_decode(file_get_contents( <my json key file> ), true)
];
为此:
$config = [
'projectId' => <MY Project ID>,
'keyFilePath' => '/path/to/service-account.json',
'scopes ' => ["https://www.googleapis.com/auth/cloud-platform"]
];
注意:我还简化了密钥文件的使用。
好的,所以我似乎偶然发现了(一个?)解决方案。除了在 Google_Client 对象上调用 setUseBatch 之外,在“$google_client->setUseBatch(true);”之后添加这些行:
$google_client->setAuthConfig( <path to json file> );
$google_client->setScopes( [ 'https://www.googleapis.com/auth/cloud-platform' ] );
看来成功了。