Firebase auth!= null我可以写但无法读取

时间:2017-09-04 04:39:39

标签: angularjs authentication firebase rules

我已经在Firebase中处理授权两天了,我无法让它工作。大量阅读文档和这里的stackoverflow仍然没有得到它。这是我的规则的样子......

{
  "rules": {
    ".read": false,
    ".write": false,
      "notes": {
        ".read": "auth != null",
        ".write": "auth != null",
        ".indexOn": "uid"
      }
    }
  }

我的数据看起来像这样......

user-notes-very-upper-root
|_notes
  |_-ugly_id_for_this_record
  | |--date: "Sat Sep 02 2017"
  | |--note: "new note from me"
  | |__uid: "firebase_ugly_id"
  |_-ugly_id_for_this_record
像我之前说过的那样,我可以写但我看不懂。我正在使用angularjs 1.6.6。我在onAuthStateChange部分有一个firebase .run来监听身份验证更改,我可以在应用程序中移动用户obj。我的角度代码看起来像这样......

angular.module('userNotes').run(function($rootScope, $window) {
  $rootScope.currentUser = null;
  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      $rootScope.currentUser = user.uid;
      console.log('User logged in from Run: ', user);
    } else {
      $rootScope.currentUser = null;
      console.warn('User logged out from Run: ', user);
      $window.location.href = '#!/';
    }
  });
});

如果我将.read节点之后的.writerules规则更改为true我读取数据没有问题,但我不希望这样。我想读取经过身份验证的用户的数据。

如何调整规则以使经过身份验证的用户能够读取和写入数据。

2017年9月4日更新

我将规则更改为......

{
  "rules": {
    "notes": {
      ".read": "auth != null",
      ".write": "auth != null",
      ".indexOn": "uid"
    }
  }
}

这些规则无法解决问题。我能写但不能读。这是控制台中的错误...

Possibly unhandled rejection: {"data":{"error":"Permission denied"},"status":401

1 个答案:

答案 0 :(得分:0)

Understanding Firebase Realtime Database Rules文档(强调我的),

  

.read.write规则级联,因此此规则集授予对路径/foo/以及/foo/bar/baz等任何更深层路径的任何数据的读取权限。 请注意,数据库中的.read.write规则较浅,会覆盖更深层次的规则,因此即使规则位于此示例,仍会在此示例中授予对/foo/bar/baz的读取权限路径/foo/bar/baz评估为false。

您无法阅读,因为您有".read": false,它会覆盖.read内的"notes"规则。这并不能解释为什么你仍然可以写因为".write": false而不应该写的。

无论如何,请尝试删除".read": false".write": false,以便它不会覆盖"notes"下的规则。