0

我正在使用React-Native和Firebase構建應用程序。無法訪問Firebase數據庫(儘管讀取規則爲true)

在另一個應用程序中工作的代碼(從firebase中拉出)未能正常工作。所以,我修改了它要簡單 - 一個時間數據呼叫,我得到以下錯誤:

Possible Unhandled Promise Rejection (id: 0): 
Error: permission_denied at /userList: Client doesn't have permission to access the desired data. 

即使我制定規則「真」(對所有人開放),我仍然得到同樣的錯誤。在同一個應用程序的其他地方,我還有其他的讀/寫功能可以工作。

這裏是我的現行規則和數據庫結構:

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

Database Structure

這裏是我的行動的創建者,使召喚:

import firebase from 'firebase'; 

export const NAMES_FETCH = 'names_fetch' 
export const namesFetch =() => { 

    return (dispatch) => { 
     firebase.database().ref(`/userList`).once('value').then(function(snapshot) { 
     var names = snapshot.val(); 
     console.log('FIREBASE PRINT', names) 
     }); 

    }; 
    }; 

我已經竭盡所能,和我在我的智慧結束。謝謝!

+0

忘了提,如果我改變裁判非常相同的代碼工作「用戶」而不是「用戶列表」 –

回答

0

當您附加偵聽器時,Firebase會檢查讀取權限。如果您有讀取該位置的權限,則允許讀取或查詢。如果您對位置沒有讀取權限,則讀取或查詢將被拒絕。

在您的情況下,讀取被拒絕,因爲沒有人擁有對/userList的讀取權限。

因此:要查詢一個位置,您必須具有該位置的讀取權限。一旦您擁有某個位置的讀取權限,您還可以讀取該位置下的所有數據(docs。這意味着查詢不能用於過濾您無權訪問的數據,Firebase文檔將其稱爲rules are not filters.

也看到一些其他許多questions about this topic的,其中許多包含變通辦法此行爲。

+0

謝謝你你的快速回答!只有一個後續:爲什麼沒有人讀取權限/ userList?我認爲這是我的規則允許在userList下。最簡單的解決辦法是給所有讀取權限,但從你的答案我猜THI打破規則是不是過濾器指導?謝謝 –

+0

我看到我的錯誤。謝謝您的回答! –