#javascript #google-cloud-firestore #google-cloud-functions #firebase-admin
#javascript #google-cloud-firestore #google-cloud-функции #firebase-администратор
Вопрос:
Я хотел бы, чтобы облачный проект Google A (project-a-id) получал доступ к данным firestore другого облачного проекта Google B (project-b-id). Для того же проекта я добавил учетную запись службы по умолчанию, а именно. project-a-id@appspot.gserviceaccount.com
в IAM проекта B и установите роль на Cloud Filestore Editor
.
В облачной функции project A я пытаюсь получить доступ как к (собственному) firestore project A, так и к firestore project B, но он продолжает показывать project базу данных по умолчанию для обоих приложений. Код является:
var primaryAppConfig = {
databaseURL: 'https://project-a-id.firebaseio.com'
};
var primaryApp = admin.initializeApp(primaryAppConfig, 'primary');
var primarydb = admin.firestore(primaryApp);
var secondaryAppConfig = {
databaseURL: 'https://project-b-id.firebaseio.com'
};
var secondaryApp = admin.initializeApp(secondaryAppConfig, 'secondary');
var secondarydb = admin.firestore(secondaryApp);
У меня создалось впечатление, что если учетной записи службы project-a по умолчанию предоставлены права в project-b, она должна автоматически получить права. По крайней мере, я нашел это применимым, когда я получаю доступ к корзинам облачных хранилищ Google таким образом.
Нужно ли сделать что-то еще? Спасибо
Комментарии:
1. «но он продолжает показывать project базу данных по умолчанию для обоих приложений» . Я не знаю, что это значит. Что конкретно вы здесь наблюдаете? У вас есть код, который воспроизводит поведение, которое вы не понимаете?
2. Попробуйте установить
projectId
параметр в настройках приложения (особенно вsecondaryAppConfig
).3. @DougStevenson: что я имел в виду, показывая ту же базу данных , так это то, что если я консольно регистрирую primarydb и secondarydb, результирующий объект отображается
project-id
как один и тот же, а именно project-a-id4. Спасибо @HiranyaJayathilaka: когда я добавляю
projectId:project-b-id
во secondaryAppConfig, я получаю ошибку разрешения. Я должен упомянуть, что если я загружаю закрытый ключ учетной записи службы по умолчанию из настроек project-b с консоли firebase, он работает, передавая его в качестве учетных данных во secondaryAppConfig. Но не могу понять, почему, когда я устанавливаю учетную запись службы project-a по умолчанию в IAM project-b, это не работает.5. Это ошибка:
Error: 7 PERMISSION_DENIED: Missing or insufficient permissions.
Ответ №1:
У меня есть firestore, созданный в облаке, в отличие от базы данных реального времени в project-a. Однако я столкнулся с той же проблемой, когда попытался получить к ней доступ из project-b.
Удалось решить проблему, создав учетную запись службы с доступом к project-a firestore, загрузив учетные данные и получив к ним доступ из project-b с помощью следующего:
credential_path = "pathTo/xxxxx.json"
db = firestore.Client.from_service_account_json(credential_path)
Ответ №2:
Вам необходимо создавать приложения в рамках текущего проекта firebase.
Консоль Firebase -> Настройки проекта -> Общие -> Добавить приложение
Эти приложения будут иметь доступ к одному и тому же firestore, но будут развернуты отдельно в разных поддоменах (под firebaseapp.com ).
Комментарии:
1. Вопрос OP касается другого проекта, а не приложения, поэтому это не так сильно поможет.