Flutter - ваша база данных Cloud Firestore имеет небезопасные правила - PullRequest
0 голосов
/ 31 января 2020

У меня есть коллекция под названием users , где я проверяю, есть ли у новых пользователей mobile no или нет. Если он присутствует, тогда я выполняю аутентификацию по телефону для этого пользователя, а затем сохраняю uid в качестве поля в документе.

Если пользователь приходит впервые, он не аутентифицирован, и я выполняю операцию чтения с * 1005. * пользователи коллекция. Теперь каждый раз, когда я получаю В вашей базе данных Cloud Firestore действуют небезопасные правила электронная почта от Google.

Ниже приводится правило, которое я использую. Пожалуйста, дайте мне знать, как я могу сделать это безопасно.

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

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете изменить свое правило, добавив больше безопасности, например:

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

Но тогда ваше приложение не сможет читать из Firebase, поскольку вы говорите, что даже для чтения необходимо authenticated.

Я решил эту проблему, позволив пользователям анонимно проходить аутентификацию в Firebase. Для этого go до:

https://console.firebase.google.com/project/ [ВАШ ПРОЕКТ] / аутентификация / провайдеры

и включите анонимный метод. Не забудьте изменить [YOUR-PROJECT] в URL.

После этого вам нужно будет всего лишь добавить несколько строк кода на главном экране или что угодно.

1) Импортируйте пакет Firebase Auth :

import 'package:firebase_auth/firebase_auth.dart';

2) Добавьте следующий код в начало вашего основного StatefulWidget :

final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
    Future<FirebaseUser> signInAnon() async {
        AuthResult result = await firebaseAuth.signInAnonymously();
        FirebaseUser user = result.user;
        print("Signed in: ${user.uid}");
        return user;
    }
    void signOut() {
        firebaseAuth.signOut();
        print('Signed Out!');
    }

3) А теперь вам просто нужно вызвать функцию внутри вашего initState:

signInAnon().then((FirebaseUser user){
     print('Login success!');
     print('UID: ' + user.uid);
});

И вуаля! Теперь каждый пользователь будет автоматически анонимно проходить аутентификацию в вашей базе данных Firebase. Самое приятное, что пользователь остается в приложении до тех пор, пока вы не удалите его или не удалите данные кеша.

Вот видео, объясняющее шаги, но с использованием экрана входа в систему, который я удалил для своего проекта, и этот пример: https://www.youtube.com/watch?v=JYCNvWKF7vw

...