red*_*dka 3 javascript firebase firebase-security google-cloud-functions firebase-admin
更新或删除时,Cloud Function会收到firebase权限被拒绝错误.
使用文件中的凭据初始化服务帐户,以便使用auth.createCustomToken当前不可用于默认帐户的凭据
admin = require('firebase-admin');
functions = require('firebase-functions');
credential = admin.credential.cert(require('./credentials.json'));
admin.initializeApp({credential: credential, databaseURL: functions.config().firebase.databaseURL});
Run Code Online (Sandbox Code Playgroud)
阻止更新的安全规则:
"downloads": {
"$key": {
".write": "data.val() == null"
}
}
Run Code Online (Sandbox Code Playgroud)
与所述用户将数据插入push到/downloads然后云功能试图更新并随后除去.即使管理员帐户据称绕过所有安全规则(包括验证),这两个操作都会失败.
FIREBASE WARNING: update at /downloads/-Kexz33ljYjKblF_ZgUo failed: permission_denied
FIREBASE WARNING: set at /downloads/-Kexz33ljYjKblF_ZgUo failed: permission_denied
Run Code Online (Sandbox Code Playgroud)
如果我将规则更改为此,则第一个错误(更新)消失:
"downloads": {
"$key": {
".write": "newData.child('uid').val() == auth.uid"
}
}
Run Code Online (Sandbox Code Playgroud)
解决方法是重新定义event.data.ref为
ref = admin.database().ref(event.data.ref.path.toString())
Run Code Online (Sandbox Code Playgroud)
jwn*_*ngr 15
在event.data返回到Cloud Function的onWrite()回调的对象中,有两种类型的数据库引用:一种是与触发write(event.data.ref)的用户相同的权限,另一种是使用admin权限限定的,授予完全读写权限access(event.data.adminRef).我无法分辨,因为您没有提供显示您的云功能的代码示例,但我打赌您正在使用event.data.ref.切换到使用event.data.adminRef应解决您的问题.
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |