2016-02-09 16 views
0

我想通過訪問保存爲UID內的孩子
數據值(母公司)來獲取用戶名:ref.once()不會被調用

var ref = new Firebase("https://mintio.firebaseio.com"); 

var authData = ref.getAuth(); 
var username = null; 
ref.on("value" , function(snapshot){ 
    console.log("reading initiaized"); 
    var usernameSnap = snapshot.child(authData.uid).child("name"); 
    username = usernameSnap.val(); 
    console.log("username read"); 
}); 

但用戶名留爲空,並且消息永遠不會被記錄到控制檯中......就好像once()函數永遠不會被調用。
的的authData對象持有正確的UID( 「谷歌:107739486693148575362」) 和數據如下:
enter image description here

編輯: 這些是我的安全規則:

{ 
    "rules": { 
     "users": { 
     "$uid": { 
      ".read": "auth.uid == $uid", 
      ".write": "auth !== null && auth.uid == $uid" 
     } 
     } 
    } 
} 

如果ISN沒有足夠的信息回購可以在這裏找到:https://[email protected]/Minzkraut/mintio.git

我在這裏做錯了什麼?

+0

你如何構建你的參考? –

+0

@DavidEast這部分'var ref = new Firebase(「https://mintio.firebaseio.com」);' ? – Minzkraut

+0

你能更新你的代碼示例嗎? –

回答

1

當我試圖訪問你的數據庫,我得到:

Error: permission_denied: Client doesn't have permission to access the desired data.

所以好像你有防止讀取得手安全規則。

最有可能的,你有一個安全,確保每個用戶只能訪問自己的用戶數據:

{ 
    "rules": { 
    "$uid": { 
     ".read": "auth.uid == $uid" 
    } 
    } 
} 

如果你有類似上述的安全規則,執行此查詢時:

var ref = new Firebase("https://mintio.firebaseio.com"); 
ref.on("value" , function(snapshot){ ... 

您正試圖從數據庫的根目錄讀取數據。 Firebase服務器會根據您的安全規則對此進行檢查,並指出您沒有對數據庫根目錄的讀取權限。所以它拒絕了操作。

你想要的是直接訪問用戶的數據:

var ref = new Firebase("https://mintio.firebaseio.com"); 
ref.child(ref.getAuth().uid).on("value" , function(snapshot){ ... 

利用這最後片斷,讀操作上用戶自己的數據開始。 Firebase服務器會根據規則進行檢查,並會看到"auth.uid == $uid"爲真。

這是火力地堡安全規則的兩個最常見的錯誤之一:

+0

我做了我的代碼和規則的變化根據您的建議...這似乎是邏輯,但文件沒有真正告訴我有關...不幸的是它仍然不會進入這個功能。不是當我在本地測試時,也不是當我部署到firebase託管 – Minzkraut

+0

我不得不作出一些假設,因爲您的問題不包括您的安全規則,也沒有提到收到錯誤消息。除非您更新您的問題以包含**最小**完整的可驗證示例,否則我無法幫助您解決問題。 –

+0

我真的很抱歉。我沒有想到這些規則發揮瞭如此重要的作用......我會更新我的問題以包含必要的信息。 – Minzkraut