javascript - Firebase 安全规则在 v3 中的作用不同
问题描述
我正在尝试为 12 月不推荐使用 v2 firebase 时准备一些旧应用程序。18. Firebase 电子邮件说只有身份验证将被弃用,但由于安全规则,我的 AngularFire 功能似乎也无法正常工作。例如 -
$firebaseArray(ref.child('data').child('stuff')); <- used to work no problem
但是现在(v3)它说它无权访问该数据。
这些是火力基地规则 -
$company:{
".read": "root.child('users').child(auth.uid).child('company').val() == $company || root.child('users').child(auth.uid).child('company').val() == 'COMPANY'",
但是,如果我只是将读取和写入都设置为 TRUE,它会再次起作用。
$company: {
".read": "true",
".write": "true"
}
$firebaseArray 有效,但它以以前没有的方式被安全规则绊倒了。关于如何调整规则以使其全部按预期方式运行的任何想法?
现在,如果我使用 v3 快照方法访问数据,它就可以工作了!但现在它没有与数据同步,它只是那个特定时刻的快照。我使用 $firebaseArray 和 $firebaseObject 的原因是它会与数据库上的任何更改同步。
firebase.database().ref('/stuff').once('value').then(function(snapshot) {
console.log('it worked!');
});
谢谢!
******************新编辑********************* 2018 年 12 月 14 日
firebase.initializeApp({
apiKey: APIKEY,
databaseURL: FIREBASE_URL, // Realtime Database
});
var stuffRef = firebase.database().ref().child('stuff');
var dataMaster = $firebaseObject(stuffRef);
我收到此错误 - ref.ref 不是函数
我究竟做错了什么??谢谢!
解决方案
当你使用firebase.database().ref('/stuff').once('value')
时,回调只会被调用一次(因此得名)。如果您想使用当前值和对该值的任何更新来调用,请使用on()
:
firebase.database().ref('/stuff').on('value', function(snapshot) {
console.log('it worked!');
});
请注意,您使用的 AngularFire 版本非常旧,因此它可能无法与 Firebase SDK 一起使用。在这种情况下,请考虑更新您的 AngularFirebase 版本。
推荐阅读
- android - 如何使用 Android 中的 Retrofit 在 json 对象中调用具有命名数组键的 API?
- localtime - 如何在 php/laravel/js 中获取计算机时间
- python - 在 geoTIFF 中获取所有唯一颜色时,如何知道 PIL 指的是什么颜色?
- function - 使用 FnMut 发送函数作为参数
- java - Java 执行 wscript - createobject(word.application 权限被拒绝
- dendrogram - 如何更改每个集群的树状图线的颜色?
- sql - 优化 Oracle SQL 查询以获得更快的结果
- python - scipy.optimize.minimize 在多变量优化中不收敛
- python - 使用 pytest 检查应用程序文件是否导入了模块?
- ruby-on-rails - Rails 条件验证:如果:不起作用