我有以下数据库规则,不允许模拟写"公司:8"到数据库。
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"companies": {
".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)"
}
}
}
然而,当我尝试写#34;公司:20"使用Firebase Python SDK进入数据库,这也是这些规则所不允许的,它可以工作:
In [1]: import firebase_admin
In [2]: from firebase_admin import credentials, db
In [3]: cred = credentials.Certificate('serviceAccountCredentials_dev_async.json
...: ')
In [4]: firebase_admin.initialize_app(cred, {'databaseURL': 'https://async-testi
...: ng.firebaseio.com/'})
Out[4]: <firebase_admin.App at 0x7fc50c00c080>
In [5]: ref = db.reference()
In [6]: ref.update({'companies': 20})
我做错了什么?
答案 0 :(得分:3)
您使用的是Firebase Admin SDK,看起来像QueryUnescape
。在这种情况下,没有应用安全规则,我认为甚至不是验证规则。
如果您有必要使用Admin SDK并希望执行验证规则,initializing with the credentials for a service account:
作为最佳做法,服务应该只能访问资源 它需要。对资源进行更精细的控制a Firebase应用实例可以访问,使用您的唯一标识符 用于表示您的服务的安全规则。然后设置合适的 允许您的服务访问所需资源的规则。