用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则
Posted
技术标签:
【中文标题】用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则【英文标题】:How to set secure rules in Firebase after user has scanned a QR code to read and write to specific database node 【发布时间】:2021-04-24 13:50:03 【问题描述】:非常感谢您对此的帮助。
我正在开发一款面向父母和孩子的应用,我目前正在使用 Firebase 实时数据库和 Firebase Auth。
家长使用电子邮件和密码创建一个帐户。然后它使用父 UID 作为节点的键在数据库中创建一个新节点。
然后,家长会生成一个 QR 码,孩子可以使用其他设备扫描该二维码。二维码包含数据库节点密钥。扫描后,子节点现在可以和父节点在同一个节点上读写了。
我的问题是,我怎么能/无论如何我可以在 firebase 中设置安全规则,以仅允许扫描 QR 码的父母和孩子读写并防止我的数据库被暴露?
孩子需要能够从父母节点读取和写入,因为不能期望他们使用电子邮件和密码进行注册以通过身份验证。这就是我使用二维码的原因,因为它可以让孩子快速轻松地加入。
非常感谢
【问题讨论】:
【参考方案1】:在实时数据库的“用户”表中,您可以使用不同的设置设置“权限”或“用户类型”标志。然后,这些设置可以指示用户拥有哪些访问权限。
然后,您可以在规则中设置访问权限,假设用户具有正确的标志类型/设置。
"Charges" :
".read": "auth != null",
".write": "(root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'admin')"
在此示例中,对“Charges”表的写入权限仅限于“CustomerDatabase”表中“userType”字段设置为“admin”的用户。您可以选择多种用户类型,如下所示:
"Charges" :
".read": "auth != null",
".write": "(root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'admin')
|| (root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'leader')"
,
在此示例中,用户必须设置“管理员”或“领导者”。
【讨论】:
以上是关于用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 metadataOutputRectOfInterestForRect 方法和 rectOfInterest 属性扫描特定区域? (二维码)