2017-02-03 36 views
1

我得到我的應用程序與讀取和寫入與廣泛開放的權限,現在我鎖定它。我的應用程序不會讀取或寫入。儘管Firebase規則模擬器說我的規則對於已通過成功的Firebase signInWithProvider的UID獲得的Facebook身份驗證用戶可以正常使用,但我仍然獲得了權限被拒絕的錯誤。我錯過了什麼?獲取權限被拒絕讀取和寫入

{ 
    "rules": { 
    "items": { 
     "$uid": { 
     // user must match the authenticated user 
     ".read": "auth.uid == $uid", 
     ".write": "auth.uid == $uid" 
     } 
    } 
    } 
} 

這是我的數據結構:

my-firebase-app 
    -items: { 
     -<uid123> : [ 
      {label:'apple'}, 
      {label:'banana'} 
     ] 
     -<uid456> : [ 
      {label:'pear'}, 
      {label:'cherry'} 
     ] 
    } 
  • 我做登錄火力Facebook的身份驗證後,firestack.auth.signInWithProvider(provider, facebookAccessToken, ''),這給了我,包括UID
  • 我推到/items/uid123和我的用戶對象獲取物品ID,333
  • 我在處爲新ID(333)設置了/items/uid123/333
  • 我訂閱項目的集合在/items/uid123通過網絡SDK這樣做:itemsRef.child(uid).on('value', (snapshot) => .....

我的組呼的樣子,

const newPostRef = itemsRef.child(uid).push(); newPostRef.set(itemWithID)

set承諾得到許可否認拒絕錯誤。

上述所有做工精細的東西,如果我的.read.write被簡單地設置true這使我想起我的語法或結構是DEF規則毗鄰。會喜歡一些輸入。

+0

請分享觸發問題的最小代碼。 –

+0

謝謝@FrankvanPuffelen,我已更新我的問題,更詳細 –

+0

我仍然不明白哪個代碼觸發了問題。它是''on()'觸發'permission denied'嗎?另請注意,我們無法看到身份驗證如何在此流動。您可以分享[單個代碼段(運行時)觸發錯誤](http://stackoverflow.com/help/mcve),而不是您想如何執行的項目符號列表。如果您嘗試在jsbin中重現問題可能會有所幫助(但這意味着必須在沒有堆疊的情況下進行重現)。 –

回答

1

安全規則沒有錯,理論上集和查詢操作都很好。

但實際上,你犯了嚴重的錯誤。正如您在評論中顯示的那樣,您正試圖同時使用Web SDK和react-native-firest庫!

兩者之間不共享身份驗證狀態,因此on('value')查詢是完全未經身份驗證的。如果您將第三個參數添加到on(取消回調),您將看到權限被拒絕的錯誤。

您必須徹底清除Web SDK,並通過堆疊使用實時數據庫。

+0

就是這樣,現在所有的工作都將我的每一個Firebase動作都移植到了堆疊中。謝謝! –