#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;