0

免责声明,我试图自我教导自己的发展。我正在使用Ionic 1和现在的Firebase 3构建混合移动应用程序,以用于我的数据库和身份验证。Angularfire 2.1 - 如何访问用户的自动生成的ID(或如何使我的UID成为每个用户的第一个节点)

对于我的情况,总之,我想展示的“朋友”为当前登录的用户列表,下面是当前数据结构我有(相关部分反正):

数据结构

Data Structure

我有一行代码,它返回我什么,我想:

var friends = $firebaseArray(ref.child('users').child('-KXcxMXkKs46Xv4-JUgW').child('friends')); 

当然,这可以”因为在那里有一个很好的硬编码值。

所以,我研究了如何检索当前的UID,以便我可以替换硬编码的值。但是在运行下面的代码之后,用户下的第一个节点不是UID(它是一些其他自动生成的值,我不知道它是如何到达的)。 UID实际上在id字段内。

var ref = firebase.database().ref(); 
authObj = $firebaseAuth(); 
var firebaseUser = authObj.$getAuth(); 
console.log(firebaseUser.uid); 

所以,最终我会爱是可以改变的数据结构,使UID是在用户的第一个节点,但我似乎无法找到文件,以做到这一点。我查看了另一个堆栈线程,但它是过时的版本,我似乎无法连接点。 Other thread

虽然,如果我不能改变结构,我仍然需要弄清楚如何以某种方式访问​​当前用户的朋友节点。

预先感谢您。这是我的第一个stackoverflow帖子,所以要温和。

更新: 每弗兰克的意见,这是我执行创建用户的代码 - $补充的是什么创造了推动ID(-KXcxM ...)。

createProfile: function(uid, user) { 
    var profile = { 
     id: uid, 
     email: user.email, 
     registered_in: Date() 
     // a number of other things 
    }; 

var messagesRef = $firebaseArray(firebase.database().ref().child("users")); 
messagesRef.$add(profile); 
}, 

register: function(user) { 
    return auth.$createUserWithEmailAndPassword(user.email, user.password) 
     .then(function(firebaseUser) { 
      console.log("User created with uid: " + firebaseUser.uid); 
      Auth.createProfile(firebaseUser.uid, user); 
      Utils.alertshow("Success!","Your user has been registered."); 
     }) 
     .catch(function(error) { 
      Utils.alertshow("Error.","Some helpful error message."); 
      console.log("Error: " + error); 
     }); 
    } 
+0

那些随机的硬编码值是所谓的*推式ID *,当您在$ firebaseArray中调用Firebase的'push()'方法或'$ add()'时会生成这些值。因此,在你的代码中,用户可以通过'push()'或'$ add()'添加到数据库中。解决这个问题的第一步是找出哪些代码会像这样添加用户。 –

+0

我使用$ add更新了我的帖子。经过一些Google搜索之后,我仍然不确定如何改变这一点,以获得我想要的效果。思考?顺便说一句,谢谢你的评论。这确实给了我一个新的研究重点。 –

+0

添加用户这个'firebase.database()。ref()。child(“users”)。child(uid).set(profile)'。 '$ firebaseArray()'会自动选择新用户。 –

回答

0

而不是创造一个$firebaseArray并呼吁它$add的,你可以存储使用常规火力地堡的JavaScript SDK用户:

createProfile: function(uid, user) { 
    var profile = { 
     id: uid, 
     email: user.email 
    }; 
    firebase.database().ref().child("users").child(uid).set(profile); 
} 

由于AngularFire是建立在火力地堡的JavaScript SDK的顶部,两者相互作用很好。因此,如果您有users上的$firebaseArray,它也会选取新的配置文件。

+0

非常感谢您的耐心和非常有帮助!对于我的学习......是否有一些特定领域的文档,我可以多磨练一点,以便我偶然避免这种情况/ –

+0

不幸的是,本主题(将Firebase身份验证用户配置文件存储在Firebase数据库中)文档。我们曾经在我们的[旧版firebase.com文档]中覆盖它(https://www.firebase.com/docs/web/guide/user-auth.html#section-storing)。但是现在你最好的选择是在Stack Overflow上进行搜索[类似这样](http://stackoverflow.com/search?q=%5Bfirebase-authentication%5D%5Bfirebase-database%5D+store+user+配置文件)。 –

+0

好的,很高兴知道。谢谢,弗兰克! –

相关问题