мне нужно проверить, существует ли имя пользователя в базе данных в реальном времени, а затем предложить пользователю выбрать другое имя пользователя. он продолжает говорить, что не найден. Я думаю, это из-за того, как мои данные вложены.
signup.js
const { email, username, password } = this.state;
await firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(async user => {
console.info('Data created', user);
let rootRef = firebase.database().ref()
rootRef.child("users")
.orderByChild("username")
.equalTo(username)
.once("value")
.then(snapshot => {
if (snapshot.exists()) {
let userData = snapshot.val()
console.info(userData)
Alert.alert('username is taken')
return userData;
}else {
console.info('not found')
}
})
@ЮниусЛ. журнал консоли ничего не возвращает, он переходит к оператору else. Пожалуйста помоги
журнал консоли rootRef
@ЮниусЛ. я изменил его на let rootRef = firebase.database().ref('users')
. как я могу получить доступ/перебрать все uid/account/имя пользователя, сохраняя при этом производительность. я пробовал .child (${uid}
) и .child ("account
), но он возвращается нулевым.
так что же содержит rootRef
?
@ЮниусЛ. Ссылка {path: "users", _refListeners: {…}, _database: Database, _query: Query} path: "users"
и снимок содержат `DataSnapshot {key: "users", ref: Reference, _value: {…}, _priority: null, _childKeys: Array(7)}`
Давайте продолжить обсуждение в чате.
Вы создаете пользователя, а затем проверяете, существует ли этот пользователь. Перед созданием пользователя проверьте, существует ли пользователь.
const { email, username, password } = this.state;
let rootRef = firebase.database().ref();
rootRef
.child('users')
.orderByChild('username')
.equalTo(username)
.once('value')
.then(snapshot => {
if (snapshot.exists()) {
let userData = snapshot.val();
console.info(userData);
Alert.alert('username is taken');
return userData;
} else {
console.info('not found');
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(async user => {
console.info('Data created', user);
});
}
});
большое спасибо все получилось отлично. Я ценю, что вы нашли время, чтобы попытаться помочь мне вчера.
показать консольный журнал userData