Вы можете изменить свое правило, добавив больше безопасности, например:
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