Отказано в доступе к Firebase / Firestore для iOS - PullRequest
0 голосов
/ 20 сентября 2018

Я знаю, что этот вопрос часто задавался, однако предложенные решения не решили его для меня.

Я попытался настроить базовое приложение iOS Firestore, которое записывает некоторые документы в коллекцию.Я следовал стандартной процедуре, добавил GoogleService-Info.plist в свой проект и при запуске вызываю `FirebaseApp.configure ().

Мои правила Firestore выглядят так:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Теперь, когда я пытаюсь что-то сохранить в коллекции, Firebase возвращает мне ошибку «Отказано в доступе».

Если мои правила таковы:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Запись принята.Очевидно, что запрос не содержит никакой информации об аутентификации, но я не могу найти дополнительную документацию по этому поводу.Я что-то пропустил?

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

если вы используете аутентификацию в своем приложении, тогда вы должны использовать

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

. Это будет работать только в том случае, если вы добавили аутентификацию на основе firebase в своем приложении, но если вы не добавили ее, она вернется PermissionDenied

вы также можете использовать этот метод

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

, но этот метод небезопасен, каждый может изменить всю вашу базу данных сразу, а также Firebase не будет рекомендовать васиспользовать это.

Если вы находитесь в режиме разработки, используйте это и создайте базу данных, но если вы собираетесь работать, вам просто нужно изменить ее на

allow read, write: if request.auth.uid != null;

или, если вы этого не сделаетеиметь аутентификацию в вашем приложении.

allow read, write: if false;

Надеюсь, это поможет вам лучше понять.

0 голосов
/ 20 сентября 2018

Я предполагаю, что, поскольку вы не проходите аутентификацию с помощью службы аутентификации firebase, в запросе отсутствует информация об аутентификации.

Из документации по firebase:

Аутентификация Один из самых распространенных способов обеспечения безопасностиШаблон правил - это управление доступом на основе состояния аутентификации пользователя.Например, ваше приложение может захотеть разрешить только зарегистрированным пользователям записывать данные

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow the user to access documents in the "cities" collection
    // only if they are authenticated.
    match /cities/{city} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

https://firebase.google.com/docs/firestore/security/rules-conditions

Вы можете попробовать правило после аутентификации через службу аутентификации firebase ипроверьте, проходит ли это правило или нет.

...