Как проверить, существует ли документ в коллекции как не прошедший проверку подлинности пользователь, когда только проверенные пользователи могут читать документ - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть коллекция пользователей, идентификатор каждого документа - электронная почта пользователя. при входе пользователя в систему я хочу проверить, есть ли документ в коллекции пользователей, который уже содержит это электронное письмо в качестве идентификатора документа (если пользователь действительно зарегистрирован).

Я использую Firebase FireStore и у меня есть правила безопасностикоторые позволяют только аутентифицированным пользователям читать данные документа.

мое правило для этой коллекции гласит:

match /collection/{docId} {
      allow read: if request.auth != null;
      ...
    }

код на странице входа в систему:

firebase.firestore().collection('collection').doc('docId').get()
        .then(doc => {
            if (doc.exists) {
                firebase.auth().signInWithEmailAndPassword(email, password);
            }
            else {
                this.setState({ error: 'user does not exist' });
            }
        })
        .catch(() => this.setState({ error: 'you don't have permission' }));
    }

Когда я запускаю эту проверку, я получаю сообщение об ошибке «у вас нет разрешения», но когда я изменяю правила для allow read: if true, все работает нормально. Все, что я хочу, это проверить, что документ существует.

1 Ответ

2 голосов
/ 04 ноября 2019

Специального разрешения для проверки существования документа не существует. Клиент должен иметь возможность полностью прочитать документ полностью, чтобы проверить, существует ли он, поэтому правила безопасности не помогут вам в этом.

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

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