我已经在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
节点之后的.write
和rules
规则更改为true
我读取数据没有问题,但我不希望这样。我想读取经过身份验证的用户的数据。
如何调整规则以使经过身份验证的用户能够读取和写入数据。
我将规则更改为......
{
"rules": {
"notes": {
".read": "auth != null",
".write": "auth != null",
".indexOn": "uid"
}
}
}
这些规则无法解决问题。我能写但不能读。这是控制台中的错误...
Possibly unhandled rejection: {"data":{"error":"Permission denied"},"status":401
答案 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"
下的规则。