Мне удалось создать функцию аутентификации, в которой пользователь может использовать:
- регистрация
- вход
- обновление / удаление учетной записи
- Выйти
Все работает хорошо, пока я не выйду. Я использую onSnapshot()
для функции обновления. Поэтому каждый раз, когда изменяется состояние авторизации, я устанавливаю возвращаемые данные в состоянии компонента.
firebase_auth.auth().onAuthStateChanged(user => {
if(user) {
firebase.collection('users').doc(user.uid).onSnapshot(doc => {
doc.exists && this.setState(prevState => ({ ...prevState, user_data: doc.data() }));
});
} else this.setState(prevState => ({ ...prevState, user_data: null }));
});
signOut() {
firebase.auth().signOut();
}
Когда я выхожу, возникает следующая ошибка:
Uncaught Ошибка в onSnapshot: FirebaseError: Отсутствует или недостаточно разрешений.
Вот мои правила базы данных. Я использую firebase cloud storage .
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow read, write: if request.auth.uid == uid
}
}
}
И если я остановлю onSnapshot listener
, даже log in
не будет работать.
firebase_auth.auth().onAuthStateChanged(user => {
if(user) {
const unsubscribe = firebase.collection('users').doc(user.uid).onSnapshot(doc => {
doc.exists && this.setState(prevState => ({ ...prevState, user_data: doc.data() }));
});
unsubscribe();
} else this.setState(prevState => ({ ...prevState, user_data: null }));
});