用户扫描二维码以读取和写入特定数据库节点后如何在 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 属性扫描特定区域? (二维码)

扫描二维码后如何进入新的viewcontroller?

微信的二维码,如何让扫描这个二维码然后跳转到一个网页呢(在关注了的前提下)

通过扫描二维码完成支付后,如何将 React 应用重定向到支付成功页面?