Второй проект Firebase не может получить доступ к first project Firestore

#firebase #google-cloud-firestore

# #firebase #google-облако-firestore

Вопрос:

Я создаю веб-сайт электронной коммерции и панель администратора.

Веб-сайт, использующий собственный хостинг, Firestore и аутентификацию.

Панель администратора имеет собственный хостинг и аутентификацию, но использует веб-сайт Firestore.

Правила безопасности не позволяют мне войти. Когда я меняю идентификатор проекта панели администратора на идентификатор веб-сайта, я могу получить доступ к Firestore веб-сайта.

Я думаю, что я знаю, что я пришел из второго проекта, поэтому он не позволил мне получить доступ к веб-сайту Firestore.

Как я могу разрешить второму проекту доступ к первому Firestore проекта

 function authorize() {
    return request.auth != null amp;amp; 
             request.auth.token.email_verified;
}

function matchOwnID(userID) {
    return request.auth.uid == userID;
}

function authAdmin() {
    return authorize() amp;amp; 
    exists(/databases/$(database)/documents/admin/$(request.auth.uid));
}


match /admin/{adminID} {
  allow get  : if authAdmin() amp;amp; matchOwnID(adminID); <--cant access from second project but first project can access.
  // allow get  : if true; <-----can access from second project.
  allow list : if false;
  allow write: if false;
}
 

Ответ №1:

Как я могу разрешить второму проекту доступ к первому Firestore проекта

Вы не можете аутентифицировать пользователей через службу аутентификации одного проекта Firebase, получая доступ к базе данных Firestore другого проекта Firebase, который имеет правила безопасности, основанные на состоянии аутентификации пользователя. Это невозможно, поскольку вы не можете совместно использовать токены идентификатора Firebase в разных проектах.


Одним из решений является настройка двух проектов в вашем приложении, как описано в документе «Настройка нескольких проектов».

Затем вы сможете войти в систему с двумя разными учетными записями пользователей, соответствующими двум проектам Firebase.

Для Интернета это можно сделать следующим образом:

   const primaryAppConfig = {
    apiKey: '.....',
    authDomain: '.....',
    // ...
  };
  firebase.initializeApp(primaryAppConfig);

  const secondaryAppConfig = {
    apiKey: '.....',
    authDomain: '.....',
    // ...
  };

  var secondaryApp = firebase.initializeApp(
    secondaryAppConfig,
    'secondary'
  );

  firebase
    .auth()
    .signInWithEmailAndPassword(email1, password1)
    .then(() => {
      secondaryApp.auth().signInWithEmailAndPassword(email2, password2);
    })
    .then(() => {
      firebase
        .firestore()
        .collection('...')   // Firestore collection from the Primary Project
        .get()
        .then(function (querySnapshot) {
          querySnapshot.forEach(function (doc) {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, ' => ', doc.data());
          });
        });

      secondaryApp
        .firestore()
        .collection('...')  // Firestore collection from the Secondary Project
        .get()
        .then(function (querySnapshot) {
          querySnapshot.forEach(function (doc) {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, ' => ', doc.data());
          });
        });
    });
 

Сказав это, вы на 100% уверены, что вам нужно использовать службы аутентификации двух проектов Firebase? Общий подход заключается в том, чтобы ваше основное приложение было в первом проекте Firebase, используя службу аутентификации этого проекта. А затем используйте второй проект Firebase только для размещения приложения Admin dashboard. Но в приложении Admin dashboard вы указываете на первый проект.


Другой возможный подход заключается в настройке двух хостинговых сайтов Firebase в одном проекте Firebase, подробнее см. Документ.

Комментарии:

1. я настроил. конфигурация 2 проектных работ

2. Хорошо, спасибо за отзыв. Так в чем же тогда проблема? Я не уверен, что понимаю.

3. значит, я должен использовать ту же аутентификацию (первый проект) для доступа к тому же firestore (первый проект)?

4. потому что оба сайта — это разные сайты, один для клиента, а другой для администратора, но оба должны использовать один и тот же firestore.

5. Да, служба аутентификации каждого проекта генерирует токены Firebase ID, которые действительны только для этого проекта.