Доступ к базе данных Firestore без аутентификации

#firebase #flutter #google-cloud-firestore #firebase-security

#firebase #флаттер #google-облако-firestore #firebase-безопасность

Вопрос:

В моем приложении я хотел бы проверить, есть ли документ с тем же адресом электронной почты, прежде чем пользователь войдет в систему (где 'email' находится поле документов в моих 'user_data' коллекциях)…

Я уже выполнил код, который это делает, но для этого требуется доступ к моей базе данных Firestore, даже если пользователь еще не вошел в систему (и в моих правилах Firestore я сказал allow read, write: if request.auth != null; )

Итак, как я могу изменить свои правила Firestore, не разрешая read всем?

Ответ №1:

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

Но я мог понять вашу ситуацию. Я мог бы дать вам идею.

Вот как я это реализую, не изменяя правила безопасности.

ЕСЛИ ВЫ ХОТИТЕ ПРОВЕРИТЬ ПОСЛЕ НАЖАТИЯ КНОПКИ:

 //SIGN UP

try {
  UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
    email: "USER ENTERED PASSWORD",
    password: "SuperSecretPassword!"
  );
} on FirebaseAuthException catch (e) {
  if (e.code == 'email-already-in-use') {
    print('The account already exists for that email.');
    // Tell User That It already exists!
  }
} catch (e) {
  print(e);
}

// Or SIGN IN

try {
 UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
    email: "barry.allen@example.com",
    password: "SuperSecretPassword!"
  );
} on FirebaseAuthException catch (e) {
  if (e.code == 'user-not-found') {
    print('No user found for that email.');
  } else if (e.code == 'wrong-password') {
    print('Wrong password provided for that user.');
  }
}
  

ЕСЛИ ВЫ ХОТИТЕ ПРОВЕРИТЬ ПРИ ВВОДЕ В ТЕКСТОВОМ ПОЛЕ ЭЛЕКТРОННОЙ ПОЧТЫ:

 UserCredential userCredential = await FirebaseAuth.instance.signInAnonymously();
  

Вы можете войти в систему анонимно и прочитать базу данных! После чтения и фильтрации выйдите из системы пользователя.

Или, если вы еще не убедились, тогда поехали,

См.: https://firebase.google.com/docs/rules/basics#content-owner_only_access

Сделать общедоступным и авторизовать пользователей. read write

Надеюсь, это подходит для вашего случая!

Комментарии:

1. Спасибо! Я использовал как адрес электронной почты / пароль, так и логин Google, поэтому я не мог использовать email already in use исключение, но я решил с помощью анонимного входа 🙂

Ответ №2:

изменить

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

Для

 allow read, write: if true;