【问题标题】:How to restrict users to read/write the data based on phone number in Firebase rules如何限制用户根据 Firebase 规则中的电话号码读取/写入数据
【发布时间】:2018-11-12 09:59:17
【问题描述】:
目前,我已经实现了一个类似于下面的项目文件夹结构
Project folder structure
我在我的代码中添加了电话验证。
现在借助 Firebase 规则,我想根据经过身份验证的电话号码限制我的用户访问孩子(电话号码 1)。
例如,如果我使用电话号码“9999999999”登录,那么我想在 Firebase 规则中限制用户只能访问“9999999999”的孩子。
你能建议我在这里提高安全性吗?
【问题讨论】:
-
请不要在问题中包含图片和链接。将代码和结构包含为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil。此外,使用电话号码作为键可能会导致一些痛苦。将密钥与数据解除关联可能会更好。这样,如果电话号码发生变化(他们确实发生了变化),您将无需删除并重新创建引用该号码的所有节点。
标签:
firebase
firebase-security
【解决方案1】:
您可以从users auth object 访问电话号码,因此您可以使用它来限制安全规则。以下是 Firestore、RTDB 和 Storage 中的示例
火库
match /databases/{database}/documents {
match /users/{phoneNumber} {
allow read, write: if request.auth.token.phone_number == phoneNumber;
}
}
实时数据库
{
"rules" : {
"users" : {
"$phoneNumber" : {
".read" : "request.auth.token.phone_number == $phoneNumber",
".write" : "request.auth.token.phone_number == $phoneNumber"
}
}
}
}
存储
service firebase.storage {
match /b/{bucket}/o {
match /users/{phoneNumber} {
allow read, write: if request.auth.token.phone_number == phoneNumber;
}
}
}