【发布时间】:2018-11-21 05:39:16
【问题描述】:
我的 Firebase 数据库中有一个 adminContent 节点,只有当用户将 admin 设置为 true 作为自定义声明时,该节点才应该可以读/写访问。
以下代码显示我的一位测试用户已将管理员设置为 true 作为声明,而一位测试用户未设置(因此问题似乎没有正确设置声明):
/* Check if admin */
firebase.auth().currentUser.getIdTokenResult().then(function(idTokenResult) {
if (idTokenResult.claims.admin) {
// THIS PART IS EXECUTED
}
});
这些是我的规则:
{
"rules": {
"metadata": {
"$user_id": {
// Read access only granted to the authenticated user.
".read": "$user_id === auth.uid",
// Write access only via Admin SDK.
".write": false
}
},
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
两个测试用户(一个有管理员声明,一个没有)都能够读取和写入 adminContent。当我在 Firebase 控制台的规则下使用两个用户的 UID 测试模拟器时,没有人获得许可。
数据结构如下:
adminContent
adminEmails
announcements
metadata
...
users
...
我的规则有什么问题吗?为什么模拟器和真实场景不同?
【问题讨论】:
标签: javascript firebase firebase-realtime-database firebase-authentication firebase-security