无法访问firebase数据库(尽管使读取规则为true)

时间:2017-07-18 16:20:12

标签: javascript firebase firebase-realtime-database firebase-authentication firebase-security

我正在使用React-Native和Firebase构建应用程序。

在另一个应用程序中工作的代码(从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)
      });

    };
  };

我已经尝试了所有的东西,而且我的智慧结束了。谢谢!

1 个答案:

答案 0 :(得分:0)

Firebase会在您附加侦听器时检查读取权限。如果您具有该位置的读取权限,则允许读取或查询。如果您对该位置没有读取权限,则拒绝读取或查询。

在您的情况下,读取被拒绝,因为没有人具有/userList的读取权限。

因此:要查询某个位置,您必须具有该位置的读取权限。一旦您获得某个位置的读取权限,您还可以阅读该位置下的所有数据(docs。这意味着查询不能用于过滤您无权访问的数据,Firebase文档会调用这些数据rules are not filters

另请参阅其他许多questions about this topic中的一些,其中许多包含此行为的解决方法。