【问题标题】:getting single objects out of $angularfire/$firebase从 $angularfire/$firebase 中获取单个对象
【发布时间】:2015-03-29 05:53:43
【问题描述】:

我正在尝试遵循 lynda.com 上的教程,该教程使用 angularfire (angularjs firebase),但它使用 $firebase.$asObject 之类的东西,现在已经过时了。我试图查看文档以及其他一些 SOF 问题,我终于找到了一些可行的方法,但它看起来很难看,而且效率很低,因为我发现它工作的唯一方法是遍历一个从数据库返回的数组。该数组包含所有已注册的用户。这就是我让它工作的方式,但是有人可以告诉我正确的方法吗,因为这似乎不应该是这样。

var ref = new Firebase(FIREBASE_URL);
var auth = firebaseAuth(ref);

auth.$onAuth(function(authUser){
    if(authUser){
        var ref = new Firebase(FIREBASE_URL + 'users/');
        var stuff = firebaseArray(ref);

         ref.on('value', function(snapshot) {
            if(snapshot.val() !== null) {
                var keys = Object.keys(snapshot.val());
                for(var key in keys){
                    if(keys.hasOwnProperty(key)){
                        if(authUser.uid === snapshot.val()[keys[key]].registeredUser){
                           rootScope.currentUser = snapshot.val()[keys[key]];
                        }
                    }
                }
            } else {
                console.log('location does not exist');
            }
          });

        var user = firebaseObject(ref);
        //console.log(user);
        rootScope.currentUser = user;
    } else {
        rootScope.currentUser = '';
    }
});

这是我的 firebase 锻造的样子:

提前谢谢你!

【问题讨论】:

  • 稍后我会写一个更详细的答案,但这里有一些$firebaseArray$firebaseObject - (1) (2) (3) 的例子。你看过 [AngularFire 入门指南] 吗?(firebase.com/docs/web/libraries/angular/guide)
  • 顺便说一句,从$firebaseArray 获取一条记录是通过$firebaseArray.prototype.$getRecord(key) 完成的。
  • 我遇到的问题似乎是我无法获得 firebase 为数组中的每个条目生成的唯一键。我正在尝试使用 auth 对象来匹配登录的用户与他们在数据库中的数据,但是对于上面发布的示例用户,auth 对象不包含“JIZ4VPSfzPNvpnPvlli”。如果我可以从登录用户那里访问该密钥,那么获取数据会容易得多。不过,也许我只是看错了。
  • 我并没有很好地描述发生了什么。基本上,当您在注册页面上创建一个新用户时,firebase 使用其身份验证服务存储的所有内容都是电子邮件和密码,但我还在数据库中添加了一些条目,包括该用户的名字和姓氏。这些是我在用户重新登录时尝试检索的内容,但是由 firebase 生成的唯一密钥未存储在经过身份验证的用户对象中,因此我试图找出一种有效的方法来访问数据库中的用户信息使用经过身份验证的用户对象提供的信息。

标签: javascript angularjs firebase angularfire


【解决方案1】:

https://www.firebase.com/docs/web/guide/user-auth.html#section-storing 中建议的那样存储用户数据通常很有帮助。

您需要使用唯一 ID 作为用户对象的键,因此您不必遍历所有用户来搜索它。唯一 ID 是身份验证数据的一部分,请参阅 https://www.firebase.com/docs/web/guide/user-auth.html#section-monitoring-authentication)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2018-08-29
    • 2015-03-24
    • 2016-10-27
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多