React Native Firebase 实时数据库如何检查用户是否已存在?

3

我需要检查实时数据库中是否已经存在用户名,然后提示用户选择另一个用户名。它一直说找不到。我认为这是因为我的数据嵌套方式。

输入图像描述

signup.js

const { email, username, password } = this.state;

    await firebase
                .auth()
                .createUserWithEmailAndPassword(email, password)
                .then(async user => {
                    console.log('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.log(userData)
                              Alert.alert('username is taken')
                                return userData;
                            }else {
                                console.log('not found')

                            }
                    })

1
显示 userData 的控制台日志 - Junius L
@JuniusL. 控制台日志没有返回任何内容,它进入了else语句。请帮忙。 - endlessCode
控制台记录 rootRef - Junius L
@JuniusL,我将它更改为let rootRef = firebase.database().ref('users')。如何在保持性能的同时访问/循环遍历所有uid /账户/用户名?我尝试过.child($ {uid}).child(“account”),但返回null。 - endlessCode
那么 rootRef 包含什么? - Junius L
显示剩余2条评论
1个回答

3
您正在创建用户,然后检查该用户是否存在。请在创建用户之前先检查用户是否已经存在。
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.log(userData);
      Alert.alert('username is taken');
      return userData;
    } else {
      console.log('not found');
      firebase
        .auth()
        .createUserWithEmailAndPassword(email, password)
        .then(async user => {
          console.log('Data created', user);
        });
    }
});

1
非常感谢,它完美地工作了。我很感激您昨天花时间尝试帮助我。 - endlessCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接