Firebase 实时数据库中的模拟读取被拒绝
Simulated read denied in Firebase Realtime Database
我正在 Firebase 实时数据库 Android 环境中构建一个私人笔记应用程序,
现在,我想在我的应用程序中添加 google 登录的身份验证功能。
到目前为止,我在 'Rules playground' 中尝试了几个规则,但效果不佳。
数据库如下:
{
"items" : {
"-MwtOrIBmhaoiGtSjzRl" : {
"key" : "-MwtOrIBmhaoiGtSjzRl",
"modifiedAt" : "2022-02-27 04:19:15.782677",
"string" : "test11"
},
"-MwvRBvCJ3hVJS3Qx1M3" : {
"key" : "-MwvRBvCJ3hVJS3Qx1M3",
"modifiedAt" : "2022-02-27 13:48:43.081140",
"string" : "Test2"
}
}
}
规则如下:
{
"rules":{
"items": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid",
},
".indexOn": "modifiedAt"
}
}
}
在 Rules playground 中,我尝试了 'get' 模拟,结果是
'Simulated read denied'
{
"auth": {
"uid": "e41ac05f-6c93-40c8-add6-90bccf8ab80d",
"token": {
"sub": "e41ac05f-6c93-40c8-add6-90bccf8ab80d",
"firebase": {
"sign_in_provider": "google.com"
},
"email": "",
"email_verified": false,
"phone_number": "",
"name": ""
}
},
"resource": {
"key": "value"
},
"path": "/item",
"method": "get",
"time": "2022-02-27T14:44:13.766Z",
"isAdmin": false
}
我能得到一些帮助吗?
一件奇怪的事情是下面的规则也不能正常工作。
{
"rules":{
"items": {
"$uid": {
".read": true,
".write": true,
},
".indexOn": "modifiedAt"
}
}
}
您在项目下的键值不是 Firebase Auth UID。它们是从您的客户端应用程序代码中随机生成的推送 ID。推送 ID 与添加该数据的人的身份无关。
需要说明的是,这个值:“MwtOrIBmhaoiGtSjzRl”不是 UID。它与您在此处指定的 UID 不匹配:“e41ac05f-6c93-40c8-add6-90bccf8ab80d”。
如果要使用用户的UID作为数据的key添加到数据库中,请不要使用push()
。您应该使用 setValue()
在您的代码中使用用户的 UID 构建数据路径,如 documentation.
中所示
我正在 Firebase 实时数据库 Android 环境中构建一个私人笔记应用程序, 现在,我想在我的应用程序中添加 google 登录的身份验证功能。
到目前为止,我在 'Rules playground' 中尝试了几个规则,但效果不佳。
数据库如下:
{
"items" : {
"-MwtOrIBmhaoiGtSjzRl" : {
"key" : "-MwtOrIBmhaoiGtSjzRl",
"modifiedAt" : "2022-02-27 04:19:15.782677",
"string" : "test11"
},
"-MwvRBvCJ3hVJS3Qx1M3" : {
"key" : "-MwvRBvCJ3hVJS3Qx1M3",
"modifiedAt" : "2022-02-27 13:48:43.081140",
"string" : "Test2"
}
}
}
规则如下:
{
"rules":{
"items": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid",
},
".indexOn": "modifiedAt"
}
}
}
在 Rules playground 中,我尝试了 'get' 模拟,结果是 'Simulated read denied'
{
"auth": {
"uid": "e41ac05f-6c93-40c8-add6-90bccf8ab80d",
"token": {
"sub": "e41ac05f-6c93-40c8-add6-90bccf8ab80d",
"firebase": {
"sign_in_provider": "google.com"
},
"email": "",
"email_verified": false,
"phone_number": "",
"name": ""
}
},
"resource": {
"key": "value"
},
"path": "/item",
"method": "get",
"time": "2022-02-27T14:44:13.766Z",
"isAdmin": false
}
我能得到一些帮助吗?
一件奇怪的事情是下面的规则也不能正常工作。
{
"rules":{
"items": {
"$uid": {
".read": true,
".write": true,
},
".indexOn": "modifiedAt"
}
}
}
您在项目下的键值不是 Firebase Auth UID。它们是从您的客户端应用程序代码中随机生成的推送 ID。推送 ID 与添加该数据的人的身份无关。
需要说明的是,这个值:“MwtOrIBmhaoiGtSjzRl”不是 UID。它与您在此处指定的 UID 不匹配:“e41ac05f-6c93-40c8-add6-90bccf8ab80d”。
如果要使用用户的UID作为数据的key添加到数据库中,请不要使用push()
。您应该使用 setValue()
在您的代码中使用用户的 UID 构建数据路径,如 documentation.