2016-05-12 18 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 
     }) 
    } 
}) 

看來,只要這個監聽器是由其他聽衆,它的工作原理。它在每次身份驗證發生變化時都會運行,並且如果他們已登錄,請將偵聽程序附加到具有該信息的路徑並獲取它。我確信這個代碼有更好的方法和可能的一些問題,但它適用於我。