使用Ionion Creator访问Firebase数据时遇到问题

时间:2018-07-02 23:38:55

标签: javascript firebase ionic-framework firebase-realtime-database firebase-authentication

我是一位新手IOS开发人员,正在尝试构建我的第一个应用程序。但是,我无法访问Firebase中的数据。

例如,我有以下数据: For example, I have the following data:

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

var user = firebase.auth().currentUser;
console.log(user.email + " " + user.username);

上面打印出“ quanie.turner@gmail.com未定义”,但是用户名变量在数据库中明确定义。也许我忽略了某件事或做错了什么。我将不胜感激。

编辑:我将数据存储在注册代码中。方法如下(顺便说一句:scope.data数组包含用户名变量):

function ($scope, $stateParams, $firebaseAuth, $firebaseArray, $state) {

    var auth = $firebaseAuth();
    var ref = firebase.database().ref('users');
    var users = $firebaseArray(ref);
    
    $scope.data = {};
    
    $scope.signup = function(){
        auth.$createUserWithEmailAndPassword($scope.data.email, $scope.data.password).then($scope.signupSuccess);
        
      
    }
    
    $scope.signupSuccess = function(){
        users.$add($scope.data);
        $state.go('login');
    }
}

谢谢

1 个答案:

答案 0 :(得分:0)

您似乎在混淆两种产品:

  1. Firebase身份验证,它允许您用户登录您的应用,并具有带有一组固定属性的用户个人资料。
  2. Firebase数据库,它允许您存储数据,通常用于为不适合其Firebase身份验证配置文件的用户存储其他属性。

您已获取的代码从Firebase身份验证中读取用户的个人资料。它不会从Firebase数据库读取任何内容。 Firebase身份验证中的用户配置文件没有username属性。它确实具有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);