Отчет об облачном хранилище Google скачать без доступа

# #api #oauth-2.0 #oauth #google-api #google-cloud-storage

Вопрос:

Я запускаю узел для загрузки отчета о продажах из облачного хранилища Google. Я получил файл учетных данных.json. Теперь проблема в том, что каждый раз, когда я запускаю свое приложение, я получаю «xxxxxxx@gmail.com» не имеет хранилища.объекты.получите доступ к объекту облачного хранилища Google».

Да, это электронное письмо нигде не зарегистрировано в облачном хранилище Google и не имеет прав на него, но оно должно работать только с учетными данными, нет? Учетные данные взяты непосредственно из облачного хранилища Google и содержат следующую информацию : client_secret,project_id,redirect_uri,client_id…

Мой пример кода:

 // Imports the Google Cloud client library.
const {Storage} = require('@google-cloud/storage');



const projectId = 'xxxxxxxxxxxxxxxxxx'
const key = 'credentials.json'
const bucketName = 'pubsite.......'
const destFileName = './test'
const fileName = 'salesreport_2020.zip'

// Creates a client
const storage = new Storage({projectId, key});

async function downloadFile() {
    const options = {
        destination: destFileName,
    };

    // Downloads the file
    await storage.bucket(bucketName).file(fileName).download(options);

    console.log(
        `gs://${bucketName}/${fileName} downloaded to ${destFileName}.`
    );
}

downloadFile().catch(console.error);
 

Ответ №1:

Вы используете файл учетных данных неправильного типа.

Ваш код написан для использования файла ключа JSON учетной записи службы. Вы упомянули, что файл учетных данных содержит client_secret. Это означает, что вы пытаетесь использовать идентификаторы клиентов OAuth 2.0.

Посмотрите в файле учетные данные.json. Он должен содержать «тип»: «service_account». Если вы видите {«установлено»: или {«веб»: в начале файла, то у вас неверные учетные данные.

Создание ключей учетной записи службы и управление ими

Кроме того, вы неправильно указываете параметры в строке:

 const storage = new Storage({projectId, key});
 

Заменить на:

 const storage = new Storage({projectId: projectId, keyFilename: key});
 

Ответ №2:

Поскольку вы видите случайный адрес gmail, это, скорее всего, означает, что клиент хранилища использует учетные данные приложения по умолчанию вместо тех, которые вы хотите. Есть два пути вперед:

  1. Используйте учетные данные приложения по умолчанию. Удалите параметры, которые вы передаете Storage конструктору, и вместо этого установите переменную GOOGLE_APPLICATION_CREDENTIALS среды в файл учетной записи службы json.
  2. Исправьте Storage конструктор, чтобы правильно передавать учетные данные. Проблема может быть в чем-то таком простом, как необходимость передать полный путь к файлу учетных данных (ie /a/b/c/credentials.json ). Возможно, параметры хранения обрабатываются неправильно, попробуйте быть откровенным, например
     const storage = new Storage({projectId: 'your-project-id', keyFilename: '/path/to/keyfile.json'});