Как пройти аутентификацию в базе данных Firestore, используя аутентификацию из другого проекта Firestore - PullRequest
0 голосов
/ 13 июня 2019

У меня есть 2 проекта Firebase, проект A и проект B. Аутентификация настроена в проекте B, заполненном зарегистрированными пользователями (метод входа по электронной почте и паролю).

Мое приложение (iOs, Swift)настроен с проектом A в качестве проекта Firebase по умолчанию.Я могу настроить проект B в качестве вторичного экземпляра Firebase, успешно аутентифицировать пользователя по проекту B и получить доступ к базе данных Firestore в проекте B (проверка подлинности контролируется, проверка request.auth.uid в правилах).Пока все хорошо.

Я могу получить доступ к базе данных Firestore (по умолчанию) в проекте A, при условии, что правила базы данных Firestore остаются открытыми (без проверки request.auth.uid).Когда я добавляю правила для проверки request.auth.uid, мне отказано в доступе, я ожидаю, потому что я прошел аутентификацию в проекте B, а не в проекте A.

Я попытался выполнить это руководство: https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.htmlно столкнулся с проблемами при работе метода входа в Google из-за того, что похоже на ошибку в Firestore (см. https://github.com/firebase/FirebaseUI-iOS/issues/670)

Мой проект B Правила Firestore настроены так:

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
  }
}

Iхотел бы настроить правила моего проекта A Firestore аналогичным образом (ограничение доступа для зарегистрированных пользователей из проекта B)

Для справки, вот как я создаю вторичный экземпляр Firebase:

//Setup the default firebase app 
FirebaseApp.configure()

//
//Set up a secondary firebase app that we want to authenticate against
//Acutal ID's etc altered for privacy reasons
//
let secondaryOptions = FirebaseOptions(googleAppID: "myAppId", gcmSenderID: "mySenderID")
secondaryOptions.bundleID = "myBundleID"
secondaryOptions.apiKey = "myAPIKey"
secondaryOptions.clientID = "myClientID"
secondaryOptions.databaseURL = "myDbUrl"
secondaryOptions.storageBucket = "myBucket"

// Configure an alternative FIRApp.
FirebaseApp.configure(name: "secondary", options: secondaryOptions)

// Retrieve a previous created named app.
guard let secondary = FirebaseApp.app(name: "secondary")
  else { assert(false, "Could not retrieve secondary app") }

// Retrieve the auth for the secondary app
let secondaryAuth = Auth.auth(app: secondary)
authUI = FUIAuth(uiWith: secondaryAuth)

// We need to adopt a FUIAuthDelegate protocol to receive callback
authUI?.delegate = self

//Set up providers
let providers: [FUIAuthProvider] = [
  FUIEmailAuth(authAuthUI: authUI, signInMethod: EmailPasswordAuthSignInMethod, forceSameDevice: false, allowNewEmailAccounts: true, actionCodeSetting: ActionCodeSettings())
]
authUI?.providers = providers

//After this, I can log users in using authUI, and access a db on secondary
//I can also access a db on the default Firebase instance, I just can't figure out how to authenticate using my secondary instance

Я не хочу оставлять базу данных А. без правил. Я не хочу, чтобы пользователю приходилось создавать 2 учетные записи или выполнять вход дважды.

Можно ли как-нибудь пройти аутентификациюЭкземпляр Firebase A, использующий уже аутентифицированного пользователя из экземпляра Firebase B?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...