【问题标题】:Having trouble accessing firebase data with ionic creator使用 ionic creator 访问 firebase 数据时遇到问题
【发布时间】:2018-12-11 04:42:06
【问题描述】:

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

例如,我有以下数据:

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

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

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

编辑:我将数据存储在我的注册代码中。方法如下(顺便说一句: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');
    }
}

谢谢

【问题讨论】:

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


    【解决方案1】:

    您似乎混淆了两种产品:

    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);
    

    【讨论】:

    • 哇,感谢您的澄清。很有意义。那么你知道是否有一个数据库命令,我可以从数据库中存储的内容中获取当前用户的信息(比如图片中存储在用户名变量下的数据)。
    • 我正在为我的答案添加信息。但是,如果您展示了如何将这些信息存储在数据库中,那么提供帮助会容易得多。我现在已经猜到了。
    • 刚刚编辑了我的答案以包括我如何存储数据。现在将阅读您的编辑。
    猜你喜欢
    • 2017-01-19
    • 2020-04-29
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多