Javascript 使用ionic creator访问firebase数据时遇到问题

Javascript 使用ionic creator访问firebase数据时遇到问题,javascript,firebase,ionic-framework,firebase-realtime-database,firebase-authentication,Javascript,Firebase,Ionic Framework,Firebase Realtime Database,Firebase Authentication,我是一名IOS开发新手,正在练习构建我的第一个应用程序。但是,我无法访问firebase中的数据 例如,我有以下数据: 我将使用工作正常的用户名和密码登录应用程序,然后使用: var user=firebase.auth().currentUser; console.log(user.email+“”+user.username); 上面打印的是“quanie”。turner@gmail.comundefined”但用户名变量在数据库中有明确定义。也许我忽略了什么或者做错了什么。我非常感谢你

我是一名IOS开发新手,正在练习构建我的第一个应用程序。但是,我无法访问firebase中的数据

例如,我有以下数据:

我将使用工作正常的用户名和密码登录应用程序,然后使用:

var user=firebase.auth().currentUser;
console.log(user.email+“”+user.username);
上面打印的是“quanie”。turner@gmail.comundefined”但用户名变量在数据库中有明确定义。也许我忽略了什么或者做错了什么。我非常感谢你的帮助

编辑:我将数据存储在注册代码中。下面是如何操作的(顺便说一句:scope.data数组包含username变量):

函数($scope、$stateParams、$firebaseAuth、$firebaseArray、$state){
var auth=$firebaseAuth();
var ref=firebase.database().ref('users');
var users=$firebaseArray(ref);
$scope.data={};
$scope.signup=函数(){
auth.$createUserWithEmailAndPassword($scope.data.email,$scope.data.password)。然后($scope.signupSuccess);
}
$scope.signupSuccess=函数(){
用户。$add($scope.data);
$state.go('login');
}

}
您似乎混淆了两种产品:

  • Firebase身份验证,允许您的用户登录到您的应用程序,并具有具有固定属性集的用户配置文件
  • Firebase数据库,允许您存储数据,通常用于存储不适合其Firebase身份验证配置文件的用户的其他属性
  • 您拥有的代码从Firebase身份验证读取用户的配置文件。它不从Firebase数据库读取任何内容。Firebase身份验证中的用户配置文件没有
    用户名
    属性。它确实有一个
    displayName
    属性,但这同样与Firebase数据库无关

    您似乎通过以下调用将其他用户信息存储到Firebase数据库中:

    firebase.database().ref("users").push({ email: user.email, password: password, username: username })
    
    虽然这是在数据库中存储数据的有效方法,但它使查找Firebase身份验证用户的数据变得困难。后面的用户由其UID(
    user.UID
    )标识,这就是为什么自定义在
    /users/$UID
    下存储其他用户属性的原因:

    firebase.database().ref("users").child(user.uid).set({ email: user.email, password: password, username: username })
    
    如果具有该结构,则可以使用以下内容加载当前用户的其他属性:

    var usersRef = firebase.database().ref("users");
    usersRef.child(user.uid).once("value").then(function(snapshot) {
      console.log(snapshot.val());
    });
    
    使用当前结构,您还可以查找用户。但由于您的结构中可能有多个用户具有相同的电子邮件地址,因此您需要对其进行查询,并需要处理查询可能匹配多个节点的事实:

    var usersRef = firebase.database().ref("users");
    var query = usersRef.orderByChild("email").equalTo(user.email);
    query.once("value").then(function(snapshot) {
      snapshot.forEach(function(userSnapshot) {
        console.log(userSnapshot.val());
      });
    });
    
    更新

    据我所知,你应该更换你的手表

    users.$add($scope.data);
    


    哇,谢谢你的澄清。这很有道理。你知道吗,如果有一个数据库命令,我可以从数据库中存储的信息中获取当前用户的信息(如图片中用户名变量下存储的数据)。我正在将信息添加到我的答案中。但是,如果您演示如何将这些信息存储在数据库中,则会更容易提供帮助。我现在已经猜到了。刚刚编辑了我的答案,包括我是如何存储数据的。现在将阅读您的编辑。
    ref.child(firebase.auth().currentUser.uid).set($scope.data);