我在使用Firebase安全规则时遇到问题。我正在记录以下错误..
[Firebase/Database][I-RDB03812] Listener at /users/4eb8920a-e407-4488-bce4-c6f64f7b0891/Following/4eb8920a-e407-4488-bce4-c6f64f7b0891 failed: permission_denied
[Firebase/Database][I-RDB03812] Listener at /UserVideo/4eb8920a-e407-4488-bce4-c6f64f7b0891 failed: permission_denied
[Firebase/Database][I-RDB03428] Using an unspecified index. Consider adding ".indexOn": "displayName" at /users to your security rules for better performance
这是我的规则结构:
{
"rules": {
"$user_id": {".write": true, ".read": true}
}
}
以下是我构建数据的方式......
UserVideo
080d4874-47d9-4f4e-b815-9b8dc9c8a2ba
13566fd4-047b-4d62-b2e5-e885e6667430
2bd7038f-5490-470e-94eb-87695e4b1071
2d84a15b-d0aa-4671-9f59-02f9d2ac5207
3af71559-5c51-40c6-b2aa-8631671c2c25
3fFH6evUANf3WDbDS3caiQu9crD3
4eb8920a-e407-4488-bce4-c6f64f7b0891
Vid1
Vid10
Vid2
Vid3
users
4eb8920a-e407-4488-bce4-c6f64f7b0891
FollowedBy
followedBy:
2
Following
4eb8920a-e407-4488-bce4-c6f64f7b0891
displayName:
"Charles"
photo:
"placeholder"
我的假设是我的规则会让用户读写任何可用的路径,但我想我错过了一些东西。
答案 0 :(得分:2)
我之前遇到过这个问题。我看起来你没有使用uid,而是另一个id实例。从firebase实例获取uid的方法如下:
final FirebaseAuth auth = FirebaseAuth.instance;
var tempUser = await auth.currentUser();
currentUser= tempUser.uid;
确保你正在推动根目录下的uid孩子。
reference.child(currentUser).push().set({
'video': 080d4874-47d9-4f4e-b815-9b8dc9c8a2ba,
});
最后,在firebase中设置你的读写规则。
{
"rules": {
"$user_id": {
".write": "auth != null && auth.uid == $user_id",
".read": "auth != null && auth.uid == $user_id"
}
},
}