Облачное хранилище Google дает мне код авторизации 401 Неверные учетные данные при попытке подключения

  1. Я закончил руководства Вот
  2. Также я закончил этот руководства (а я хочу использовать как хранилище и речь)

Теперь у меня есть gcloud и он работает в терминале, я также попытался выполнить эту команду из оболочки:

curl -s -H "Content-Type: application/json" \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
https://speech.googleapis.com/v1/speech:recognize \
-d @sync-request.json

И это работает, как я получаю:

{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"confidence": 0.9840146
}
]
}
]
}

Но когда я пытаюсь поставить код. Например этот:

# Includes the autoloader for libraries installed with composer
require __DIR__ . '/vendor/autoload.php';

// Imports the Google Cloud Storage client library.
use Google\Cloud\Storage\StorageClient;

function auth_cloud_implicit($projectId)
{
$config = [
'projectId' => $projectId,
];

# If you don't specify credentials when constructing the client, the
# client library will look for credentials in the environment.
$storage = new StorageClient($config);

# Make an authenticated API request (listing storage buckets)
foreach ($storage->buckets() as $bucket) {
printf('Bucket: %s' . PHP_EOL, $bucket->name());
}
}

# Your Google Cloud Platform project ID
$projectId = 'somenumbersandletters';

auth_cloud_implicit($projectId);

Я получаю эту ошибку:

Google\Cloud\Core\Exception\ServiceException: { "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } } in /var/www/speech/vendor/google/cloud-core/RequestWrapper.php on line 263

Так что мой вопрос в том, что я делаю неправильно, и почему этот код не работает? Я сделал тот же код на другом компьютере, и он работает нормально, я не понимаю, почему он не работает над этим компьютером так же? Любые предложения будут приветствоваться!

0

Решение

Что я заметил, так это то, что если вы хотите создать экземпляр службы Google, вам просто нужно поместить файл json в массив, и он должен работать. Например, если вы хотите создать экземпляр Google Speech Client, просто сделайте это:

$speech = new SpeechClient([
'projectId' => $projectId,
'keyFilePath' => 'path/to/file.json',
'languageCode' => 'en-US',
]);

и если вы хотите Google Storage Client, то просто:

$storage = new StorageClient([
'projectId' => $projectId,
'keyFilePath' => 'path/to/file.json',
])

Если это не поможет, попробуйте также

Перейти к этому ссылка на сайт и используйте этот код для подключения к корзине:

function auth_cloud_explicit($projectId, $serviceAccountPath)
{
# Explicitly use service account credentials by specifying the private key
# file.
$config = [
'keyFilePath' => $serviceAccountPath,
'projectId' => $projectId,
];
$storage = new StorageClient($config);

# Make an authenticated API request (listing storage buckets)
foreach ($storage->buckets() as $bucket) {
printf('Bucket: %s' . PHP_EOL, $bucket->name());
}
}

а также собирается Google Cloud Platform / IAM и добавление учетной записи службы, в которой код выдавал ошибку, что эта учетная запись не имеет доступа к корзине. Теперь все работает отлично! Спасибо @ brandon-yarbrough за помощь

ОБНОВИТЬ:
Если ничего из вышеперечисленного не работает для вас, попробуйте настроить окружение внутри вашего файла, используя этот код:

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');

И это должно работать.

Также по состоянию на 12.2018 есть обновленный код, который вы можете использовать:

use Google\Auth\Credentials\GCECredentials;

$gceCredentials = new GCECredentials();
$config = [
'projectId' => $projectId,
'credentialsFetcher' => $gceCredentials,
];
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]