2016-05-12 59 views
0

问题本身很简单:对于Firebase应用程序,如何获取之前在登录后被阻止并且不再被阻止的数据?在登录后检索以前阻止的数据

至于导致我问这个问题的细节:

在这个特定的应用程序,我用一个简单的布局与根树,用户和数据的2个主要子树。数据树是完全可读的,任何人都可以随时阅读。用户树几乎相反,唯一的例外是如果您登录,那么您可以阅读仅属于您的特定子树。这导致了一个问题,即当您访问该页面时,可能对您非常重要的这些数据会在您登录之前被阻止,并且无法直接检索。但是,登录后,您现在有权获取该信息,但因为之前被阻止,似乎无法解压缩它。

我搜索了文档,发现只有一个触发器可能是有用的,onAuth(),但即使我可以在登录后运行的东西,我实际上得不到任何数据。到目前为止,我得到的最好的Firebase参考资料是针对我需要的特定子树,但我无法找到任何实际使用该参考获取快照的方式,因为它是在页面加载之后。看来我唯一的选择是在登录后刷新页面并在页面加载时检查登录,但这是一个非常大的开销。有没有其他的方法可以让你在登录之后没有权限的树中获取数据,并且有权读取它?可能在文档中有一些我找不到或者不明白的文档引用,它允许我要求不通过只能在pageload上定义的触发器的基本引用的新快照?

+0

如果您的页面想要加载需要认证的数据,则应在认证发生后(即在'onAuth()')中附加您的监听器。如果您在制作该工作时遇到问题,如果您分享[显示问题的代码段](http://stackoverflow.com/help/mcve),将会更容易提供帮助。 –

+0

@FrankvanPuffelen感谢您的推荐,我终于搞定了。我编写了代码,按照你所描述的工作,然后继续调试,直到找到主要问题。所以可以接受的答案只是你的第一句话。让它成为答案,我会接受它。随意包含这样的想法,即如果它不工作,它可能是一个特定的逻辑或语法错误,或者甚至可能是一个非常短暂的基本代码段。否则,我会在稍后的时间。 – Ryan

回答

0

Frank van puffelen是对的。

这是非常简单:

// setup and other code 
ref = new Firebase(URL);      //The firebase reference 
myuserid = null;        //Storage variable 
myname = null;         //Storage variable 

//Other code 

//Start of answer code 

ref.onAuth(function(authData) {    //ON login status change 

    if (ref.getAuth()) {      //Are they logged in 
     myuserid = authData.uid;    //Stores their UID for use 
     userbase = 'Users/' + authData.uid; //Get path to user info 
     ref.child(userbase).on("value", function(snapshot, prevChildKey) { 
      var newData = snapshot.val();  //get data 
      console.log(newData);    //View data, confirmed it was what I wanted 
      myname = newData.name;    //The important data I needed 
     }) 
    } 
}) 

看来,只要这个监听器是由其他听众,它的工作原理。它在每次身份验证发生变化时都会运行,并且如果他们已登录,请将侦听程序附加到具有该信息的路径并获取它。我确信这个代码有更好的方法和可能的一些问题,但它适用于我。