【发布时间】:2021-12-12 00:48:03
【问题描述】:
我对 firebase 规则有点困惑。这是我的实时数据库。 “1”内的每个节点都是使用用户的 Firebase 唯一 ID 创建的。并且在用户的节点中有一个对象列表。
目标是让用户能够在该节点不存在的情况下创建该节点,并允许用户仅在该节点内进行读/写。
我试过这个,但它不起作用。我得到权限错误。
{
"rules": {
"1": {
"$key": {
".read": "auth != null && auth.uid == $key",
".write": "auth != null && auth.uid == $key"
}
}
}
}
注意:以后还会有其他父节点(“2”、“3”等),所以保持“1”很重要。另外,以防万一,我正在使用 firebase 匿名登录。
感谢您的帮助。
更新:
我像这样检索installationId:
Task<String> getIdTask = FirebaseInstallations.getInstance().getId()
并像这样访问数据库:
FirebaseDatabase.getInstance()
.getReference()
.child("1")
.child(installationId)
尝试使用上面的代码访问数据库会得到:
Listen at /1/cKYZwWrlRmSof79rtfuX82 failed: DatabaseError: Permission denied
解决方案: 我才意识到我的错误的严重性。检索我正在使用的用户 ID
FirebaseInstallations.getInstance().getId()
Firebase 将其视为 userId:
FirebaseAuth.getInstance().getCurrentUser().getUid();
使用后者解决了这个问题。
【问题讨论】:
-
规则本身还没有做任何事情。您能否显示产生错误的最小代码,并在其中通过记录当前用户的 UID 来显示您的代码满足您的规则条件。
-
@FrankvanPuffelen 感谢您的回复。我更新了帖子以包含我的代码和错误日志
-
@FrankvanPuffelen 没关系,我才意识到我做错了什么。规则很好,我只是在代码中使用了错误的键。当我在帖子中复制代码时我意识到了这一点,所以谢谢你让我这样做:P
-
很高兴听到您发现了问题! ???我投票结束这个问题,因为它是一个错字/短暂的问题。
标签: firebase-realtime-database firebase-authentication firebase-security