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