我有一个带有内容管理端的 React Redux Firebase 应用程序(所有这些页面都以/admin/...
)。我需要将 Firebase 数据库和 Firebase 存储写入权限限制为这些用户的一小部分,并在未经身份验证(或未经管理员角色身份验证)的用户尝试访问那里时处理重定向。目前,任何发现身份验证按钮位于/admin
可以使用 facebook 或 google 登录,然后就可以访问所有内容。
从我读到的内容看来,这是通过自定义令牌 https://firebase.google.com/docs/auth/admin/create-custom-tokens,但我不清楚将他们提供的片段放在哪里才能安全地执行此操作。我尝试手动添加admin: true
通过 Web 控制台进入 firebase 数据库,然后设置我的 firebase 数据库规则,如下所示:
{
"rules": {
".read": "true",
".write": "auth != null && root.child('users').child(auth.uid).child('admin').val() == true"
}
}
这似乎在保护对数据库的写访问方面起作用,但我无法使用相同的管理字段/令牌进行 Firebase 存储,所以我必须这样做:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth!=null && request.auth.uid=="{my uid}";
//request.auth.token.admin==true did not seem to work
}
}
}
我也无法理解admin: true
显示在客户端上,所以我现在没有重定向的方法。
有人可以帮我解决这个问题吗?
限制访问的一种方法small(和稳定的)用户子集是通过使用他们的 uid 并检查它是否包含在管理员用户 uid 数组中,如下所示:
function isAdminUser() {
return request.auth.uid in [
"UcqBSJOPDT........zzaeh1",
"pQHSCZ1........hS2mfKmd2",
"MK8kif7.......eEqJzUl2n1",
"FrSm................XI82"
];
}
service firebase.storage {
match /b/xxxxxxx.appspot.com/o {
match /{allPaths=**} {
allow write: .....;
allow read: if request.auth != null && isAdminUser();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)